From e6a59c2cf0f35740d4ea72a702f69e45c20a974d Mon Sep 17 00:00:00 2001 From: Marwane Koutar <100198937+MarwaneKoutar@users.noreply.github.com> Date: Wed, 28 Feb 2024 18:34:06 +0100 Subject: [PATCH 001/177] fixed typo in readme (#319) * fixed typo in readme * fixed typo in readme (upload -> uploaded) --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 402ac8d1..9a3cf696 100644 --- a/readme.md +++ b/readme.md @@ -187,10 +187,10 @@ To build and package your Lambda, run the following command: The `archive` command can be customized using the following parameters -* `--output-path` A valid file system path where a folder with the archive operation result will be placed. This folder will contains the following elements: +* `--output-path` A valid file system path where a folder with the archive operation result will be placed. This folder will contain the following elements: * A file link named `bootstrap` * An executable file - * A **Zip** file ready to be upload to AWS + * A **Zip** file ready to be uploaded to AWS * `--verbose` A number that sets the command output detail level between the following values: * `0` (Silent) * `1` (Output) From 221978224cf82027f46c0aa54def83476fb74412 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Wed, 15 May 2024 09:56:35 +0200 Subject: [PATCH 002/177] Add tracing of request events + mention LOG_LEVEL in README (#315) * add tracing of request events + mention LOG_LEVEL in README * fix typo Co-authored-by: Mahdi Bahrami * clarify the use of env variable and the swift cli Co-authored-by: Mahdi Bahrami * clarify language about HTTP server Co-authored-by: Mahdi Bahrami * formatting Co-authored-by: Mahdi Bahrami * factor in additional suggestions from @mahdibm * combine two logger statement into one and print only for Kb of payload --------- Co-authored-by: Mahdi Bahrami --- .../AWSLambdaRuntimeCore/LambdaRunner.swift | 8 +++- readme.md | 44 +++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift b/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift index 9557f41f..23281b94 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift @@ -78,7 +78,13 @@ internal final class LambdaRunner { allocator: self.allocator, invocation: invocation ) - logger.debug("sending invocation to lambda handler") + // when log level is trace or lower, print the first Kb of the payload + if logger.logLevel <= .trace, let buffer = bytes.getSlice(at: 0, length: max(bytes.readableBytes, 1024)) { + logger.trace("sending invocation to lambda handler", + metadata: ["1024 first bytes": .string(String(buffer: buffer))]) + } else { + logger.debug("sending invocation to lambda handler") + } return handler.handle(bytes, context: context) // Hopping back to "our" EventLoop is important in case the handler returns a future that // originated from a foreign EventLoop/EventLoopGroup. diff --git a/readme.md b/readme.md index 9a3cf696..915d766f 100644 --- a/readme.md +++ b/readme.md @@ -174,6 +174,50 @@ Next, create a `MyLambda.swift` and implement your Lambda. Note that the file ca Beyond the small cognitive complexity of using the `EventLoopFuture` based APIs, note these APIs should be used with extra care. An `EventLoopLambdaHandler` will execute the user code on the same `EventLoop` (thread) as the library, making processing faster but requiring the user code to never call blocking APIs as it might prevent the underlying process from functioning. +## Testing Locally + +Before deploying your code to AWS Lambda, you can test it locally by setting the `LOCAL_LAMBDA_SERVER_ENABLED` environment variable to true. It will look like this on CLI: + +```sh +LOCAL_LAMBDA_SERVER_ENABLED=true swift run +``` + +This starts a local HTTP server listening on port 7000. You can invoke your local Lambda function by sending an HTTP POST request to `http://127.0.0.1:7000/invoke`. + +The request must include the JSON payload expected as an `Event` by your function. You can create a text file with the JSON payload documented by AWS or captured from a trace. In this example, we used [the APIGatewayv2 JSON payload from the documentation](https://docs.aws.amazon.com/lambda/latest/dg/services-apigateway.html#apigateway-example-event), saved as `events/create-session.json` text file. + +Then we use curl to invoke the local endpoint with the test JSON payload. + +```sh +curl -v --header "Content-Type:\ application/json" --data @events/create-session.json http://127.0.0.1:7000/invoke +* Trying 127.0.0.1:7000... +* Connected to 127.0.0.1 (127.0.0.1) port 7000 +> POST /invoke HTTP/1.1 +> Host: 127.0.0.1:7000 +> User-Agent: curl/8.4.0 +> Accept: */* +> Content-Type:\ application/json +> Content-Length: 1160 +> +< HTTP/1.1 200 OK +< content-length: 247 +< +* Connection #0 to host 127.0.0.1 left intact +{"statusCode":200,"isBase64Encoded":false,"body":"...","headers":{"Access-Control-Allow-Origin":"*","Content-Type":"application\/json; charset=utf-8","Access-Control-Allow-Headers":"*"}} +``` + +## Increase logging verbosity + +You can increase the verbosity of the runtime using the `LOG_LEVEL` environment variable. + +- `LOG_LEVEL=debug` displays information about the Swift AWS Lambda Runtime activity and lifecycle +- `LOG_LEVEL=trace` displays a string representation of the input event as received from the AWS Lambda service (before invoking your handler). + +You can modify the verbosity of a Lambda function by passing the LOG_LEVEL environment variable both during your local testing (LOG_LEVEL=trace LOCAL_LAMBDA_SERVER_ENABLED=true swift run) or when you deploy your code on AWS Lambda. +You can [define environment variables for your Lambda functions](https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html) in the AWS console or programmatically. + +This repository follows [Swift's Log Level Guidelines](https://www.swift.org/server/guides/libraries/log-levels.html). At `LOG_LEVEL=trace`, the AWS Lambda runtime will display a string representation of the input event as received from the AWS Lambda service before invoking your handler, for maximum debuggability. + ## Deploying to AWS Lambda To deploy Lambda functions to AWS Lambda, you need to compile the code for Amazon Linux which is the OS used on AWS Lambda microVMs, package it as a Zip file, and upload to AWS. From 17a993e3b172b201e4ce42613cc634f856b3f120 Mon Sep 17 00:00:00 2001 From: jsonfry Date: Wed, 22 May 2024 13:37:53 +0100 Subject: [PATCH 003/177] Local lambda invocation endpoint env var (#321) add #321 --- Sources/AWSLambdaRuntimeCore/Lambda.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/AWSLambdaRuntimeCore/Lambda.swift b/Sources/AWSLambdaRuntimeCore/Lambda.swift index f23dc57c..67b45cd8 100644 --- a/Sources/AWSLambdaRuntimeCore/Lambda.swift +++ b/Sources/AWSLambdaRuntimeCore/Lambda.swift @@ -143,7 +143,7 @@ public enum Lambda { #if DEBUG if Lambda.env("LOCAL_LAMBDA_SERVER_ENABLED").flatMap(Bool.init) ?? false { do { - return try Lambda.withLocalServer { + return try Lambda.withLocalServer(invocationEndpoint: Lambda.env("LOCAL_LAMBDA_SERVER_INVOCATION_ENDPOINT")) { _run(configuration) } } catch { From 294d06bfd40fd7f847c917ccb1e88e1c5b2143af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Wed, 22 May 2024 14:55:42 +0200 Subject: [PATCH 004/177] Use LAMBDA_USE_LOCAL_DEPS env var in local builds with docker (#325) --- Plugins/AWSLambdaPackager/Plugin.swift | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/Plugins/AWSLambdaPackager/Plugin.swift b/Plugins/AWSLambdaPackager/Plugin.swift index cd76f5c3..3a8c8b20 100644 --- a/Plugins/AWSLambdaPackager/Plugin.swift +++ b/Plugins/AWSLambdaPackager/Plugin.swift @@ -115,11 +115,24 @@ struct AWSLambdaPackager: CommandPlugin { for product in products { print("building \"\(product.name)\"") let buildCommand = "swift build -c \(buildConfiguration.rawValue) --product \(product.name) --static-swift-stdlib" - try self.execute( - executable: dockerToolPath, - arguments: ["run", "--rm", "-v", "\(packageDirectory.string):/workspace", "-w", "/workspace", baseImage, "bash", "-cl", buildCommand], - logLevel: verboseLogging ? .debug : .output - ) + if ProcessInfo.processInfo.environment["LAMBDA_USE_LOCAL_DEPS"] != nil { + // when developing locally, we must have the full swift-aws-lambda-runtime project in the container + // because Examples' Package.swift have a dependency on ../.. + // just like Package.swift's examples assume ../.., we assume we are two levels below the root project + let lastComponent = packageDirectory.lastComponent + let beforeLastComponent = packageDirectory.removingLastComponent().lastComponent + try self.execute( + executable: dockerToolPath, + arguments: ["run", "--rm", "--env", "LAMBDA_USE_LOCAL_DEPS=true", "-v", "\(packageDirectory.string)/../..:/workspace", "-w", "/workspace/\(beforeLastComponent)/\(lastComponent)", baseImage, "bash", "-cl", buildCommand], + logLevel: verboseLogging ? .debug : .output + ) + } else { + try self.execute( + executable: dockerToolPath, + arguments: ["run", "--rm", "-v", "\(packageDirectory.string):/workspace", "-w", "/workspace", baseImage, "bash", "-cl", buildCommand], + logLevel: verboseLogging ? .debug : .output + ) + } let productPath = buildOutputPath.appending(product.name) guard FileManager.default.fileExists(atPath: productPath.string) else { Diagnostics.error("expected '\(product.name)' binary at \"\(productPath.string)\"") From cb09b958ee3c9c73cbb5b0d71b3cd9c219c146c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Wed, 22 May 2024 15:34:41 +0200 Subject: [PATCH 005/177] add LOCAL_LAMBDA_SERVER_INVOCATION_ENDPOINT to the readme (#326) --- readme.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/readme.md b/readme.md index 915d766f..8a4111e6 100644 --- a/readme.md +++ b/readme.md @@ -205,6 +205,17 @@ curl -v --header "Content-Type:\ application/json" --data @events/create-session * Connection #0 to host 127.0.0.1 left intact {"statusCode":200,"isBase64Encoded":false,"body":"...","headers":{"Access-Control-Allow-Origin":"*","Content-Type":"application\/json; charset=utf-8","Access-Control-Allow-Headers":"*"}} ``` +### Modifying the local endpoint + +By default, when using the local Lambda server, it listens on the `/invoke` endpoint. + +Some testing tools, such as the [AWS Lambda runtime interface emulator](https://docs.aws.amazon.com/lambda/latest/dg/images-test.html), require a different endpoint. In that case, you can use the `LOCAL_LAMBDA_SERVER_INVOCATION_ENDPOINT` environment variable to force the runtime to listen on a different endpoint. + +Example: + +```sh +LOCAL_LAMBDA_SERVER_ENABLED=true LOCAL_LAMBDA_SERVER_INVOCATION_ENDPOINT=/2015-03-31/functions/function/invocations swift run +``` ## Increase logging verbosity From 0d4716d30ce767668c84f980fe6b70eddb1a0dbb Mon Sep 17 00:00:00 2001 From: "Sven A. Schmidt" Date: Wed, 19 Jun 2024 18:29:40 +0200 Subject: [PATCH 006/177] Fix compile error on Windows (#328) --- Plugins/AWSLambdaPackager/Plugin.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Plugins/AWSLambdaPackager/Plugin.swift b/Plugins/AWSLambdaPackager/Plugin.swift index 3a8c8b20..4d8b5a09 100644 --- a/Plugins/AWSLambdaPackager/Plugin.swift +++ b/Plugins/AWSLambdaPackager/Plugin.swift @@ -205,7 +205,8 @@ struct AWSLambdaPackager: CommandPlugin { #if os(macOS) || os(Linux) let arguments = ["--junk-paths", "--symlinks", zipfilePath.string, relocatedArtifactPath.string, symbolicLinkPath.string] #else - throw Error.unsupportedPlatform("can't or don't know how to create a zip file on this platform") + let arguments = [String]() + throw Errors.unsupportedPlatform("can't or don't know how to create a zip file on this platform") #endif // run the zip tool From 872183bbe99aaa26e52f9d4baef6adaf815f45df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Wed, 26 Jun 2024 10:09:25 +0200 Subject: [PATCH 007/177] allow compilation with the static linux sdk (musl) (#331) --- Package.swift | 4 ++-- Plugins/AWSLambdaPackager/Plugin.swift | 10 +++++++++- Sources/AWSLambdaRuntimeCore/Lambda.swift | 10 ++++++++-- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/Package.swift b/Package.swift index 1b47e1d0..b1bfd98e 100644 --- a/Package.swift +++ b/Package.swift @@ -21,8 +21,8 @@ let package = Package( .library(name: "AWSLambdaTesting", targets: ["AWSLambdaTesting"]), ], dependencies: [ - .package(url: "https://github.com/apple/swift-nio.git", .upToNextMajor(from: "2.43.1")), - .package(url: "https://github.com/apple/swift-log.git", .upToNextMajor(from: "1.4.2")), + .package(url: "https://github.com/apple/swift-nio.git", .upToNextMajor(from: "2.67.0")), + .package(url: "https://github.com/apple/swift-log.git", .upToNextMajor(from: "1.5.4")), .package(url: "https://github.com/apple/swift-docc-plugin", from: "1.0.0"), ], targets: [ diff --git a/Plugins/AWSLambdaPackager/Plugin.swift b/Plugins/AWSLambdaPackager/Plugin.swift index 4d8b5a09..25c5823e 100644 --- a/Plugins/AWSLambdaPackager/Plugin.swift +++ b/Plugins/AWSLambdaPackager/Plugin.swift @@ -16,8 +16,16 @@ import Dispatch import Foundation import PackagePlugin -#if canImport(Glibc) +#if os(macOS) +import Darwin +#elseif canImport(Glibc) import Glibc +#elseif canImport(Musl) +import Musl +#elseif os(Windows) +import ucrt +#else +#error("Unsupported platform") #endif @main diff --git a/Sources/AWSLambdaRuntimeCore/Lambda.swift b/Sources/AWSLambdaRuntimeCore/Lambda.swift index 67b45cd8..f499d581 100644 --- a/Sources/AWSLambdaRuntimeCore/Lambda.swift +++ b/Sources/AWSLambdaRuntimeCore/Lambda.swift @@ -12,10 +12,16 @@ // //===----------------------------------------------------------------------===// -#if os(Linux) +#if os(macOS) +import Darwin.C +#elseif canImport(Glibc) import Glibc +#elseif canImport(Musl) +import Musl +#elseif os(Windows) +import ucrt #else -import Darwin.C +#error("Unsupported platform") #endif #if swift(<5.9) From 35e0919ed2f5095d9377c16e1787cf5301b2fffa Mon Sep 17 00:00:00 2001 From: Camden Fullmer Date: Mon, 5 Aug 2024 11:51:21 -0400 Subject: [PATCH 008/177] Add support for resources when packaging using the SwiftPM plugin (#333) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add support for resources when packaging using the SwiftPM plugin. * Copy the resources directory to the working directory instead of recreating the directroy structure. * Add resource packaging example. * Use the bundle's url function to locate the file url. * Fix year for soundness check. --------- Co-authored-by: Sébastien Stormacq --- Examples/ResourcePackaging/Lambda.swift | 28 ++++++++++++++++++ Examples/ResourcePackaging/Package.swift | 36 ++++++++++++++++++++++++ Examples/ResourcePackaging/hello.txt | 1 + Plugins/AWSLambdaPackager/Plugin.swift | 23 +++++++++++++-- 4 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 Examples/ResourcePackaging/Lambda.swift create mode 100644 Examples/ResourcePackaging/Package.swift create mode 100644 Examples/ResourcePackaging/hello.txt diff --git a/Examples/ResourcePackaging/Lambda.swift b/Examples/ResourcePackaging/Lambda.swift new file mode 100644 index 00000000..5e71a688 --- /dev/null +++ b/Examples/ResourcePackaging/Lambda.swift @@ -0,0 +1,28 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2021 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import AWSLambdaRuntime +import Foundation + +// in this example we are reading from a bundled resource and responding with the contents + +@main +struct MyLambda: SimpleLambdaHandler { + func handle(_ input: String, context: LambdaContext) async throws -> String { + guard let fileURL = Bundle.module.url(forResource: "hello", withExtension: "txt") else { + fatalError("no file url") + } + return try String(contentsOf: fileURL) + } +} diff --git a/Examples/ResourcePackaging/Package.swift b/Examples/ResourcePackaging/Package.swift new file mode 100644 index 00000000..cfb4db28 --- /dev/null +++ b/Examples/ResourcePackaging/Package.swift @@ -0,0 +1,36 @@ +// swift-tools-version:5.7 + +import class Foundation.ProcessInfo // needed for CI to test the local version of the library +import PackageDescription + +let package = Package( + name: "swift-aws-lambda-runtime-example", + platforms: [ + .macOS(.v12), + ], + products: [ + .executable(name: "MyLambda", targets: ["MyLambda"]), + ], + dependencies: [ + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha"), + ], + targets: [ + .executableTarget( + name: "MyLambda", + dependencies: [ + .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), + ], + path: ".", + resources: [ + .process("hello.txt"), + ] + ), + ] +) + +// for CI to test the local version of the library +if ProcessInfo.processInfo.environment["LAMBDA_USE_LOCAL_DEPS"] != nil { + package.dependencies = [ + .package(name: "swift-aws-lambda-runtime", path: "../.."), + ] +} diff --git a/Examples/ResourcePackaging/hello.txt b/Examples/ResourcePackaging/hello.txt new file mode 100644 index 00000000..b45ef6fe --- /dev/null +++ b/Examples/ResourcePackaging/hello.txt @@ -0,0 +1 @@ +Hello, World! \ No newline at end of file diff --git a/Plugins/AWSLambdaPackager/Plugin.swift b/Plugins/AWSLambdaPackager/Plugin.swift index 25c5823e..33cf00e3 100644 --- a/Plugins/AWSLambdaPackager/Plugin.swift +++ b/Plugins/AWSLambdaPackager/Plugin.swift @@ -67,6 +67,7 @@ struct AWSLambdaPackager: CommandPlugin { // create the archive let archives = try self.package( + packageName: context.package.displayName, products: builtProducts, toolsProvider: { name in try context.tool(named: name).path }, outputDirectory: configuration.outputDirectory, @@ -183,6 +184,7 @@ struct AWSLambdaPackager: CommandPlugin { // TODO: explore using ziplib or similar instead of shelling out private func package( + packageName: String, products: [LambdaProduct: Path], toolsProvider: (String) throws -> Path, outputDirectory: Path, @@ -210,17 +212,34 @@ struct AWSLambdaPackager: CommandPlugin { try FileManager.default.copyItem(atPath: artifactPath.string, toPath: relocatedArtifactPath.string) try FileManager.default.createSymbolicLink(atPath: symbolicLinkPath.string, withDestinationPath: relocatedArtifactPath.lastComponent) + var arguments: [String] = [] #if os(macOS) || os(Linux) - let arguments = ["--junk-paths", "--symlinks", zipfilePath.string, relocatedArtifactPath.string, symbolicLinkPath.string] + arguments = [ + "--recurse-paths", + "--symlinks", + zipfilePath.lastComponent, + relocatedArtifactPath.lastComponent, + symbolicLinkPath.lastComponent, + ] #else - let arguments = [String]() throw Errors.unsupportedPlatform("can't or don't know how to create a zip file on this platform") #endif + // add resources + let artifactDirectory = artifactPath.removingLastComponent() + let resourcesDirectoryName = "\(packageName)_\(product.name).resources" + let resourcesDirectory = artifactDirectory.appending(resourcesDirectoryName) + let relocatedResourcesDirectory = workingDirectory.appending(resourcesDirectoryName) + if FileManager.default.fileExists(atPath: resourcesDirectory.string) { + try FileManager.default.copyItem(atPath: resourcesDirectory.string, toPath: relocatedResourcesDirectory.string) + arguments.append(resourcesDirectoryName) + } + // run the zip tool try self.execute( executable: zipToolPath, arguments: arguments, + customWorkingDirectory: workingDirectory, logLevel: verboseLogging ? .debug : .silent ) From f42dda3fcaedae5470b59bf63799af1183cf6e94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Mon, 5 Aug 2024 18:01:17 +0200 Subject: [PATCH 009/177] Update soundness.sh to support 2024 and 2025 (#335) --- scripts/soundness.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/soundness.sh b/scripts/soundness.sh index 353359d8..651a5451 100755 --- a/scripts/soundness.sh +++ b/scripts/soundness.sh @@ -19,7 +19,7 @@ here="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" function replace_acceptable_years() { # this needs to replace all acceptable forms with 'YEARS' - sed -e 's/20[12][78901]-20[12][89012]/YEARS/' -e 's/201[789]/YEARS/' -e 's/202[012]/YEARS/' + sed -e 's/20[12][78901]-20[12][89012345]/YEARS/' -e 's/201[789]/YEARS/' -e 's/202[012345]/YEARS/' } printf "=> Checking for unacceptable language... " From d6e6819b369daf0b8bd59f5c5eedca1c7df1ff06 Mon Sep 17 00:00:00 2001 From: Adolfo Date: Wed, 7 Aug 2024 08:32:59 +0200 Subject: [PATCH 010/177] Examples list documents (#336) First version of projects.md file --- projects.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 projects.md diff --git a/projects.md b/projects.md new file mode 100644 index 00000000..e63d13ec --- /dev/null +++ b/projects.md @@ -0,0 +1,7 @@ +# Projects using Swift AWS Lambda Runtime library + +Here you will find a list of code repositories that has in common the usage of the **Swift AWS Lambda Runtime** library. + +Provide a link to your code repository and a short description about your example. + +- [GlobantPlus](https://github.com/fitomad/TechTalk-AWS-Lamba-Swift/). An imaginary streaming services with a tvOS application that interacts with the AWS API Gateway, AWS SQS services and a set of Lambdas that cover different aspects. Repository's documentation available in Spanish🇪🇸 and English🇺🇸. \ No newline at end of file From a5c144fc76438bd8875fe4267b8a96879fa45c71 Mon Sep 17 00:00:00 2001 From: Tim Condon <0xTim@users.noreply.github.com> Date: Wed, 7 Aug 2024 09:38:21 +0100 Subject: [PATCH 011/177] Update projects.md to add Penny (#338) --- projects.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects.md b/projects.md index e63d13ec..92740651 100644 --- a/projects.md +++ b/projects.md @@ -4,4 +4,5 @@ Here you will find a list of code repositories that has in common the usage of t Provide a link to your code repository and a short description about your example. -- [GlobantPlus](https://github.com/fitomad/TechTalk-AWS-Lamba-Swift/). An imaginary streaming services with a tvOS application that interacts with the AWS API Gateway, AWS SQS services and a set of Lambdas that cover different aspects. Repository's documentation available in Spanish🇪🇸 and English🇺🇸. \ No newline at end of file +- [GlobantPlus](https://github.com/fitomad/TechTalk-AWS-Lamba-Swift/). An imaginary streaming services with a tvOS application that interacts with the AWS API Gateway, AWS SQS services and a set of Lambdas that cover different aspects. Repository's documentation available in Spanish🇪🇸 and English🇺🇸. +- [Vapor's PennyBot](https://github.com/vapor/penny-bot). A collections of lambdas that handle events from GitHub for automatically creating releases for Vapor, handling new sponsors, automatically answering questions on Discord and providing 'pennies' - internet karma - to community members who help others or contribute to Vapor. From ed72bdda8da5ac0bd79d809d8ab2e80b825692b6 Mon Sep 17 00:00:00 2001 From: "Sven A. Schmidt" Date: Wed, 7 Aug 2024 10:39:53 +0200 Subject: [PATCH 012/177] Update projects.md (#337) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sébastien Stormacq --- projects.md | 1 + 1 file changed, 1 insertion(+) diff --git a/projects.md b/projects.md index 92740651..0761440b 100644 --- a/projects.md +++ b/projects.md @@ -5,4 +5,5 @@ Here you will find a list of code repositories that has in common the usage of t Provide a link to your code repository and a short description about your example. - [GlobantPlus](https://github.com/fitomad/TechTalk-AWS-Lamba-Swift/). An imaginary streaming services with a tvOS application that interacts with the AWS API Gateway, AWS SQS services and a set of Lambdas that cover different aspects. Repository's documentation available in Spanish🇪🇸 and English🇺🇸. +- [DocUploader](https://github.com/SwiftPackageIndex/DocUploader). DocUploader is a component of the Swift Package Index site. It receives zipped DocC documentation archives which can be quite large via an S3 inbox and proceeds to unzip and upload the documentation files to S3. - [Vapor's PennyBot](https://github.com/vapor/penny-bot). A collections of lambdas that handle events from GitHub for automatically creating releases for Vapor, handling new sponsors, automatically answering questions on Discord and providing 'pennies' - internet karma - to community members who help others or contribute to Vapor. From 79fa2c2beefeb1f51787012d3379f3d436a22e19 Mon Sep 17 00:00:00 2001 From: Alessio Buratti <9006089+Buratti@users.noreply.github.com> Date: Fri, 23 Aug 2024 18:50:22 +0200 Subject: [PATCH 013/177] [Draft] Detached tasks (#334) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * First prototype * Fix build * Removes task cancellation https://github.com/swift-server/swift-aws-lambda-runtime/pull/334#discussion_r1666713889 * Force user to handle errors https://github.com/swift-server/swift-aws-lambda-runtime/pull/334#discussion_r1666712903 * Remove EventLoop API https://github.com/swift-server/swift-aws-lambda-runtime/pull/334#discussion_r1666712244 * Make DetachedTaskContainer internal https://github.com/swift-server/swift-aws-lambda-runtime/pull/334#discussion_r1666710596 https://github.com/swift-server/swift-aws-lambda-runtime/pull/334#discussion_r1666706576 * Removes @unchecked Sendable https://github.com/swift-server/swift-aws-lambda-runtime/pull/334#discussion_r1666707646 * Invoke awaitAll() from async context * Fix ambiguous expression type for swift 5.7 * Fix visibility of detachedBackgroundTask * Add swift-doc * Add example usage to readme * Add tests --------- Co-authored-by: Sébastien Stormacq --- .../AWSLambdaRuntimeCore/DetachedTasks.swift | 95 +++++++++++++++++++ .../AWSLambdaRuntimeCore/LambdaContext.swift | 30 +++++- .../AWSLambdaRuntimeCore/LambdaRunner.swift | 18 +++- .../DetachedTasksTests.swift | 80 ++++++++++++++++ readme.md | 21 +++- 5 files changed, 239 insertions(+), 5 deletions(-) create mode 100644 Sources/AWSLambdaRuntimeCore/DetachedTasks.swift create mode 100644 Tests/AWSLambdaRuntimeCoreTests/DetachedTasksTests.swift diff --git a/Sources/AWSLambdaRuntimeCore/DetachedTasks.swift b/Sources/AWSLambdaRuntimeCore/DetachedTasks.swift new file mode 100644 index 00000000..f06750bf --- /dev/null +++ b/Sources/AWSLambdaRuntimeCore/DetachedTasks.swift @@ -0,0 +1,95 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2022 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// +import Foundation +import NIOConcurrencyHelpers +import NIOCore +import Logging + +/// A container that allows tasks to finish after a synchronous invocation +/// has produced its response. +actor DetachedTasksContainer: Sendable { + + struct Context: Sendable { + let eventLoop: EventLoop + let logger: Logger + } + + private var context: Context + private var storage: [RegistrationKey: EventLoopFuture] = [:] + + init(context: Context) { + self.context = context + } + + /// Adds a detached async task. + /// + /// - Parameters: + /// - name: The name of the task. + /// - task: The async task to execute. + /// - Returns: A `RegistrationKey` for the registered task. + func detached(task: @Sendable @escaping () async -> Void) { + let key = RegistrationKey() + let promise = context.eventLoop.makePromise(of: Void.self) + promise.completeWithTask(task) + let task = promise.futureResult.always { [weak self] result in + guard let self else { return } + Task { + await self.removeTask(forKey: key) + } + } + self.storage[key] = task + } + + func removeTask(forKey key: RegistrationKey) { + self.storage.removeValue(forKey: key) + } + + /// Awaits all registered tasks to complete. + /// + /// - Returns: An `EventLoopFuture` that completes when all tasks have finished. + func awaitAll() -> EventLoopFuture { + let tasks = storage.values + if tasks.isEmpty { + return context.eventLoop.makeSucceededVoidFuture() + } else { + let context = context + return EventLoopFuture.andAllComplete(Array(tasks), on: context.eventLoop).flatMap { [weak self] in + guard let self else { + return context.eventLoop.makeSucceededFuture(()) + } + let promise = context.eventLoop.makePromise(of: Void.self) + promise.completeWithTask { + try await self.awaitAll().get() + } + return promise.futureResult + } + } + } +} + +extension DetachedTasksContainer { + /// Lambda detached task registration key. + struct RegistrationKey: Hashable, CustomStringConvertible, Sendable { + var value: String + + init() { + // UUID basically + self.value = UUID().uuidString + } + + var description: String { + self.value + } + } +} diff --git a/Sources/AWSLambdaRuntimeCore/LambdaContext.swift b/Sources/AWSLambdaRuntimeCore/LambdaContext.swift index 24e960a4..943c4e5f 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaContext.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaContext.swift @@ -81,6 +81,7 @@ public struct LambdaContext: CustomDebugStringConvertible, Sendable { let logger: Logger let eventLoop: EventLoop let allocator: ByteBufferAllocator + let tasks: DetachedTasksContainer init( requestID: String, @@ -91,7 +92,8 @@ public struct LambdaContext: CustomDebugStringConvertible, Sendable { clientContext: String?, logger: Logger, eventLoop: EventLoop, - allocator: ByteBufferAllocator + allocator: ByteBufferAllocator, + tasks: DetachedTasksContainer ) { self.requestID = requestID self.traceID = traceID @@ -102,6 +104,7 @@ public struct LambdaContext: CustomDebugStringConvertible, Sendable { self.logger = logger self.eventLoop = eventLoop self.allocator = allocator + self.tasks = tasks } } @@ -177,7 +180,13 @@ public struct LambdaContext: CustomDebugStringConvertible, Sendable { clientContext: clientContext, logger: logger, eventLoop: eventLoop, - allocator: allocator + allocator: allocator, + tasks: DetachedTasksContainer( + context: DetachedTasksContainer.Context( + eventLoop: eventLoop, + logger: logger + ) + ) ) } @@ -188,6 +197,23 @@ public struct LambdaContext: CustomDebugStringConvertible, Sendable { let remaining = deadline - now return .milliseconds(remaining) } + + var tasks: DetachedTasksContainer { + self.storage.tasks + } + + + /// Registers a background task that continues running after the synchronous invocation has completed. + /// This is useful for tasks like flushing metrics or performing clean-up operations without delaying the response. + /// + /// - Parameter body: An asynchronous closure that performs the background task. + /// - Warning: You will be billed for the milliseconds of Lambda execution time until the very last + /// background task is finished. + public func detachedBackgroundTask(_ body: @escaping @Sendable () async -> ()) { + Task { + await self.tasks.detached(task: body) + } + } public var debugDescription: String { "\(Self.self)(requestID: \(self.requestID), traceID: \(self.traceID), invokedFunctionARN: \(self.invokedFunctionARN), cognitoIdentity: \(self.cognitoIdentity ?? "nil"), clientContext: \(self.clientContext ?? "nil"), deadline: \(self.deadline))" diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift b/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift index 23281b94..87457f43 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift @@ -95,13 +95,27 @@ internal final class LambdaRunner { if case .failure(let error) = result { logger.warning("lambda handler returned an error: \(error)") } - return (invocation, result) + return (invocation, result, context) } - }.flatMap { invocation, result in + }.flatMap { invocation, result, context in // 3. report results to runtime engine self.runtimeClient.reportResults(logger: logger, invocation: invocation, result: result).peekError { error in logger.error("could not report results to lambda runtime engine: \(error)") + // To discuss: + // Do we want to await the tasks in this case? + let promise = context.eventLoop.makePromise(of: Void.self) + promise.completeWithTask { + return try await context.tasks.awaitAll().get() + } + return promise.futureResult + }.map { _ in context } + } + .flatMap { (context: LambdaContext) -> EventLoopFuture in + let promise = context.eventLoop.makePromise(of: Void.self) + promise.completeWithTask { + try await context.tasks.awaitAll().get() } + return promise.futureResult } } diff --git a/Tests/AWSLambdaRuntimeCoreTests/DetachedTasksTests.swift b/Tests/AWSLambdaRuntimeCoreTests/DetachedTasksTests.swift new file mode 100644 index 00000000..b0ec42bc --- /dev/null +++ b/Tests/AWSLambdaRuntimeCoreTests/DetachedTasksTests.swift @@ -0,0 +1,80 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2017-2018 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +@testable import AWSLambdaRuntimeCore +import NIO +import XCTest +import Logging + +class DetachedTasksTest: XCTestCase { + + actor Expectation { + var isFulfilled = false + func fulfill() { + isFulfilled = true + } + } + + func testAwaitTasks() async throws { + let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) + defer { XCTAssertNoThrow(try eventLoopGroup.syncShutdownGracefully()) } + + let context = DetachedTasksContainer.Context( + eventLoop: eventLoopGroup.next(), + logger: Logger(label: "test") + ) + let expectation = Expectation() + + let container = DetachedTasksContainer(context: context) + await container.detached { + try! await Task.sleep(for: .milliseconds(200)) + await expectation.fulfill() + } + + try await container.awaitAll().get() + let isFulfilled = await expectation.isFulfilled + XCTAssert(isFulfilled) + } + + func testAwaitChildrenTasks() async throws { + let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) + defer { XCTAssertNoThrow(try eventLoopGroup.syncShutdownGracefully()) } + + let context = DetachedTasksContainer.Context( + eventLoop: eventLoopGroup.next(), + logger: Logger(label: "test") + ) + let expectation1 = Expectation() + let expectation2 = Expectation() + + let container = DetachedTasksContainer(context: context) + await container.detached { + await container.detached { + try! await Task.sleep(for: .milliseconds(300)) + await expectation1.fulfill() + } + try! await Task.sleep(for: .milliseconds(200)) + await container.detached { + try! await Task.sleep(for: .milliseconds(100)) + await expectation2.fulfill() + } + } + + try await container.awaitAll().get() + let isFulfilled1 = await expectation1.isFulfilled + let isFulfilled2 = await expectation2.isFulfilled + XCTAssert(isFulfilled1) + XCTAssert(isFulfilled2) + } +} diff --git a/readme.md b/readme.md index 8a4111e6..a21a55eb 100644 --- a/readme.md +++ b/readme.md @@ -474,7 +474,7 @@ public protocol SimpleLambdaHandler { ### Context -When calling the user provided Lambda function, the library provides a `LambdaContext` class that provides metadata about the execution context, as well as utilities for logging and allocating buffers. +When calling the user provided Lambda function, the library provides a `LambdaContext` class that provides metadata about the execution context, as well as utilities for logging, allocating buffers and dispatch background tasks. ```swift public struct LambdaContext: CustomDebugStringConvertible, Sendable { @@ -555,6 +555,25 @@ public struct LambdaInitializationContext: Sendable { } ``` +### Background tasks + +The detachedBackgroundTask method allows you to register background tasks that continue running even after the Lambda runtime has reported the result of a synchronous invocation. This is particularly useful for integrations with services like API Gateway or CloudFront, where you can quickly return a response without waiting for non-essential tasks such as flushing metrics or performing non-critical clean-up operations. + +```swift + @main + struct MyLambda: SimpleLambdaHandler { + func handle(_ request: APIGatewayV2Request, context: LambdaContext) async throws -> APIGatewayV2Response { + let response = makeResponse() + context.detachedBackgroundTask { + try? await Task.sleep(for: .seconds(3)) + print("Background task completed") + } + print("Returning response") + return response + } + } +``` + ### Configuration The library’s behavior can be fine tuned using environment variables based configuration. The library supported the following environment variables: From 8676c8933a9c97e46b82cef43cda62b80ef30d25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Mon, 26 Aug 2024 12:25:41 +0200 Subject: [PATCH 014/177] apply swiftformat (#342) * apply swiftformat * update dep on Swift Docc to v1.3.0 * force usage of swift docc plugin 1.3.0 --- Examples/Foundation/Lambda.swift | 5 +- .../MyApp/MyApp/ContentView.swift | 22 +++---- Package.swift | 2 +- Package@swift-5.7.swift | 2 +- Package@swift-5.8.swift | 2 +- .../ControlPlaneRequest.swift | 2 +- .../AWSLambdaRuntimeCore/DetachedTasks.swift | 15 ++--- Sources/AWSLambdaRuntimeCore/HTTPClient.swift | 9 +-- .../Lambda+LocalServer.swift | 2 +- Sources/AWSLambdaRuntimeCore/Lambda.swift | 18 +++--- .../LambdaConfiguration.swift | 2 +- .../AWSLambdaRuntimeCore/LambdaContext.swift | 7 +- .../AWSLambdaRuntimeCore/LambdaHandler.swift | 2 +- .../LambdaRequestID.swift | 64 +++++++++---------- .../AWSLambdaRuntimeCore/LambdaRunner.swift | 4 +- .../AWSLambdaRuntimeCore/LambdaRuntime.swift | 2 +- .../LambdaRuntimeClient.swift | 8 +-- Sources/AWSLambdaRuntimeCore/Terminator.swift | 2 +- Sources/AWSLambdaRuntimeCore/Utils.swift | 14 ++-- Sources/MockServer/main.swift | 10 +-- .../DetachedTasksTests.swift | 21 +++--- .../MockLambdaServer.swift | 16 ++--- Tests/AWSLambdaRuntimeCoreTests/Utils.swift | 2 +- 23 files changed, 115 insertions(+), 118 deletions(-) diff --git a/Examples/Foundation/Lambda.swift b/Examples/Foundation/Lambda.swift index 660574a1..959c8e94 100644 --- a/Examples/Foundation/Lambda.swift +++ b/Examples/Foundation/Lambda.swift @@ -122,8 +122,7 @@ struct ExchangeRatesCalculator { monthIndex: Array.Index, currencies: [String], state: [Date: ExchangeRates], - callback: @escaping ((Result<[Date: ExchangeRates], Swift.Error>) -> Void)) - { + callback: @escaping ((Result<[Date: ExchangeRates], Swift.Error>) -> Void)) { if monthIndex == months.count { return callback(.success(state)) } @@ -182,7 +181,7 @@ struct ExchangeRatesCalculator { interval = nil } - let ratesByCurrencyCode: [String: Decimal?] = Dictionary(uniqueKeysWithValues: try currencyCodes.map { + let ratesByCurrencyCode: [String: Decimal?] = try Dictionary(uniqueKeysWithValues: currencyCodes.map { let xpathCurrency = $0.replacingOccurrences(of: "'", with: "'") if let rateString = try document.nodes(forXPath: "/exchangeRateMonthList/exchangeRate/currencyCode[text()='\(xpathCurrency)']/../rateNew/text()").first?.stringValue, // We must parse the decimal data using the UK locale, not the system one. diff --git a/Examples/LocalDebugging/MyApp/MyApp/ContentView.swift b/Examples/LocalDebugging/MyApp/MyApp/ContentView.swift index 4c7d3158..46f9d5a7 100644 --- a/Examples/LocalDebugging/MyApp/MyApp/ContentView.swift +++ b/Examples/LocalDebugging/MyApp/MyApp/ContentView.swift @@ -23,18 +23,18 @@ struct ContentView: View { var body: some View { VStack(alignment: .leading, spacing: 20) { - TextField("Username", text: $name) - SecureField("Password", text: $password) - let inputIncomplete = name.isEmpty || password.isEmpty + TextField("Username", text: self.$name) + SecureField("Password", text: self.$password) + let inputIncomplete = self.name.isEmpty || self.password.isEmpty Button { Task { - isLoading = true + self.isLoading = true do { - response = try await self.register() + self.response = try await self.register() } catch { - response = error.localizedDescription + self.response = error.localizedDescription } - isLoading = false + self.isLoading = false } } label: { Text("Register") @@ -42,16 +42,16 @@ struct ContentView: View { .foregroundColor(.white) .background(.black) .border(.black, width: 2) - .opacity(isLoading ? 0 : 1) + .opacity(self.isLoading ? 0 : 1) .overlay { - if isLoading { + if self.isLoading { ProgressView() } } } - .disabled(inputIncomplete || isLoading) + .disabled(inputIncomplete || self.isLoading) .opacity(inputIncomplete ? 0.5 : 1) - Text(response) + Text(self.response) }.padding(100) } diff --git a/Package.swift b/Package.swift index b1bfd98e..4e625ba6 100644 --- a/Package.swift +++ b/Package.swift @@ -23,7 +23,7 @@ let package = Package( dependencies: [ .package(url: "https://github.com/apple/swift-nio.git", .upToNextMajor(from: "2.67.0")), .package(url: "https://github.com/apple/swift-log.git", .upToNextMajor(from: "1.5.4")), - .package(url: "https://github.com/apple/swift-docc-plugin", from: "1.0.0"), + .package(url: "https://github.com/apple/swift-docc-plugin", exact: "1.3.0"), ], targets: [ .target(name: "AWSLambdaRuntime", dependencies: [ diff --git a/Package@swift-5.7.swift b/Package@swift-5.7.swift index a4559656..d217b198 100644 --- a/Package@swift-5.7.swift +++ b/Package@swift-5.7.swift @@ -24,7 +24,7 @@ let package = Package( .package(url: "https://github.com/apple/swift-nio.git", .upToNextMajor(from: "2.43.1")), .package(url: "https://github.com/apple/swift-log.git", .upToNextMajor(from: "1.4.2")), .package(url: "https://github.com/swift-server/swift-backtrace.git", .upToNextMajor(from: "1.2.3")), - .package(url: "https://github.com/apple/swift-docc-plugin", from: "1.0.0"), + .package(url: "https://github.com/apple/swift-docc-plugin", exact: "1.3.0"), ], targets: [ .target(name: "AWSLambdaRuntime", dependencies: [ diff --git a/Package@swift-5.8.swift b/Package@swift-5.8.swift index a4559656..d217b198 100644 --- a/Package@swift-5.8.swift +++ b/Package@swift-5.8.swift @@ -24,7 +24,7 @@ let package = Package( .package(url: "https://github.com/apple/swift-nio.git", .upToNextMajor(from: "2.43.1")), .package(url: "https://github.com/apple/swift-log.git", .upToNextMajor(from: "1.4.2")), .package(url: "https://github.com/swift-server/swift-backtrace.git", .upToNextMajor(from: "1.2.3")), - .package(url: "https://github.com/apple/swift-docc-plugin", from: "1.0.0"), + .package(url: "https://github.com/apple/swift-docc-plugin", exact: "1.3.0"), ], targets: [ .target(name: "AWSLambdaRuntime", dependencies: [ diff --git a/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift b/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift index 411dc5ad..5c089a5c 100644 --- a/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift +++ b/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift @@ -66,7 +66,7 @@ struct ErrorResponse: Hashable, Codable { } extension ErrorResponse { - internal func toJSONBytes() -> [UInt8] { + func toJSONBytes() -> [UInt8] { var bytes = [UInt8]() bytes.append(UInt8(ascii: "{")) bytes.append(contentsOf: #""errorType":"#.utf8) diff --git a/Sources/AWSLambdaRuntimeCore/DetachedTasks.swift b/Sources/AWSLambdaRuntimeCore/DetachedTasks.swift index f06750bf..d684ffe7 100644 --- a/Sources/AWSLambdaRuntimeCore/DetachedTasks.swift +++ b/Sources/AWSLambdaRuntimeCore/DetachedTasks.swift @@ -12,19 +12,18 @@ // //===----------------------------------------------------------------------===// import Foundation +import Logging import NIOConcurrencyHelpers import NIOCore -import Logging /// A container that allows tasks to finish after a synchronous invocation /// has produced its response. actor DetachedTasksContainer: Sendable { - struct Context: Sendable { let eventLoop: EventLoop let logger: Logger } - + private var context: Context private var storage: [RegistrationKey: EventLoopFuture] = [:] @@ -40,9 +39,9 @@ actor DetachedTasksContainer: Sendable { /// - Returns: A `RegistrationKey` for the registered task. func detached(task: @Sendable @escaping () async -> Void) { let key = RegistrationKey() - let promise = context.eventLoop.makePromise(of: Void.self) + let promise = self.context.eventLoop.makePromise(of: Void.self) promise.completeWithTask(task) - let task = promise.futureResult.always { [weak self] result in + let task = promise.futureResult.always { [weak self] _ in guard let self else { return } Task { await self.removeTask(forKey: key) @@ -50,7 +49,7 @@ actor DetachedTasksContainer: Sendable { } self.storage[key] = task } - + func removeTask(forKey key: RegistrationKey) { self.storage.removeValue(forKey: key) } @@ -59,9 +58,9 @@ actor DetachedTasksContainer: Sendable { /// /// - Returns: An `EventLoopFuture` that completes when all tasks have finished. func awaitAll() -> EventLoopFuture { - let tasks = storage.values + let tasks = self.storage.values if tasks.isEmpty { - return context.eventLoop.makeSucceededVoidFuture() + return self.context.eventLoop.makeSucceededVoidFuture() } else { let context = context return EventLoopFuture.andAllComplete(Array(tasks), on: context.eventLoop).flatMap { [weak self] in diff --git a/Sources/AWSLambdaRuntimeCore/HTTPClient.swift b/Sources/AWSLambdaRuntimeCore/HTTPClient.swift index 7e724485..c5cf91e0 100644 --- a/Sources/AWSLambdaRuntimeCore/HTTPClient.swift +++ b/Sources/AWSLambdaRuntimeCore/HTTPClient.swift @@ -20,7 +20,7 @@ import NIOPosix /// A barebone HTTP client to interact with AWS Runtime Engine which is an HTTP server. /// Note that Lambda Runtime API dictate that only one requests runs at a time. /// This means we can avoid locks and other concurrency concern we would otherwise need to build into the client -internal final class HTTPClient { +final class HTTPClient { private let eventLoop: EventLoop private let configuration: LambdaConfiguration.RuntimeEngine private let targetHost: String @@ -120,7 +120,7 @@ internal final class HTTPClient { } } - internal struct Request: Equatable { + struct Request: Equatable { let url: String let method: HTTPMethod let targetHost: String @@ -138,14 +138,14 @@ internal final class HTTPClient { } } - internal struct Response: Equatable { + struct Response: Equatable { var version: HTTPVersion var status: HTTPResponseStatus var headers: HTTPHeaders var body: ByteBuffer? } - internal enum Errors: Error { + enum Errors: Error { case connectionResetByPeer case timeout case cancelled @@ -277,6 +277,7 @@ private final class LambdaChannelHandler: ChannelDuplexHandler { switch self.state { case .idle: break + case .running(let promise, let timeout): self.state = .idle timeout?.cancel() diff --git a/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift b/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift index 1f8c9e0f..7c91870f 100644 --- a/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift +++ b/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift @@ -36,7 +36,7 @@ extension Lambda { /// - body: Code to run within the context of the mock server. Typically this would be a Lambda.run function call. /// /// - note: This API is designed strictly for local testing and is behind a DEBUG flag - internal static func withLocalServer(invocationEndpoint: String? = nil, _ body: @escaping () -> Value) throws -> Value { + static func withLocalServer(invocationEndpoint: String? = nil, _ body: @escaping () -> Value) throws -> Value { let server = LocalLambda.Server(invocationEndpoint: invocationEndpoint) try server.start().wait() defer { try! server.stop() } diff --git a/Sources/AWSLambdaRuntimeCore/Lambda.swift b/Sources/AWSLambdaRuntimeCore/Lambda.swift index f499d581..def18c35 100644 --- a/Sources/AWSLambdaRuntimeCore/Lambda.swift +++ b/Sources/AWSLambdaRuntimeCore/Lambda.swift @@ -40,11 +40,11 @@ public enum Lambda { /// - handlerType: The Handler to create and invoke. /// /// - note: This is a blocking operation that will run forever, as its lifecycle is managed by the AWS Lambda Runtime Engine. - internal static func run( + static func run( configuration: LambdaConfiguration = .init(), handlerType: Handler.Type ) -> Result { - Self.run(configuration: configuration, handlerProvider: CodableSimpleLambdaHandler.makeHandler(context:)) + self.run(configuration: configuration, handlerProvider: CodableSimpleLambdaHandler.makeHandler(context:)) } /// Run a Lambda defined by implementing the ``LambdaHandler`` protocol. @@ -56,11 +56,11 @@ public enum Lambda { /// - handlerType: The Handler to create and invoke. /// /// - note: This is a blocking operation that will run forever, as its lifecycle is managed by the AWS Lambda Runtime Engine. - internal static func run( + static func run( configuration: LambdaConfiguration = .init(), handlerType: Handler.Type ) -> Result { - Self.run(configuration: configuration, handlerProvider: CodableLambdaHandler.makeHandler(context:)) + self.run(configuration: configuration, handlerProvider: CodableLambdaHandler.makeHandler(context:)) } /// Run a Lambda defined by implementing the ``EventLoopLambdaHandler`` protocol. @@ -72,11 +72,11 @@ public enum Lambda { /// - handlerType: The Handler to create and invoke. /// /// - note: This is a blocking operation that will run forever, as its lifecycle is managed by the AWS Lambda Runtime Engine. - internal static func run( + static func run( configuration: LambdaConfiguration = .init(), handlerType: Handler.Type ) -> Result { - Self.run(configuration: configuration, handlerProvider: CodableEventLoopLambdaHandler.makeHandler(context:)) + self.run(configuration: configuration, handlerProvider: CodableEventLoopLambdaHandler.makeHandler(context:)) } /// Run a Lambda defined by implementing the ``ByteBufferLambdaHandler`` protocol. @@ -88,11 +88,11 @@ public enum Lambda { /// - handlerType: The Handler to create and invoke. /// /// - note: This is a blocking operation that will run forever, as its lifecycle is managed by the AWS Lambda Runtime Engine. - internal static func run( + static func run( configuration: LambdaConfiguration = .init(), handlerType: (some ByteBufferLambdaHandler).Type ) -> Result { - Self.run(configuration: configuration, handlerProvider: handlerType.makeHandler(context:)) + self.run(configuration: configuration, handlerProvider: handlerType.makeHandler(context:)) } /// Run a Lambda defined by implementing the ``LambdaRuntimeHandler`` protocol. @@ -101,7 +101,7 @@ public enum Lambda { /// - handlerProvider: A provider of the ``LambdaRuntimeHandler`` to invoke. /// /// - note: This is a blocking operation that will run forever, as its lifecycle is managed by the AWS Lambda Runtime Engine. - internal static func run( + static func run( configuration: LambdaConfiguration = .init(), handlerProvider: @escaping (LambdaInitializationContext) -> EventLoopFuture ) -> Result { diff --git a/Sources/AWSLambdaRuntimeCore/LambdaConfiguration.swift b/Sources/AWSLambdaRuntimeCore/LambdaConfiguration.swift index 33d056f8..a1b739dd 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaConfiguration.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaConfiguration.swift @@ -16,7 +16,7 @@ import Dispatch import Logging import NIOCore -internal struct LambdaConfiguration: CustomStringConvertible { +struct LambdaConfiguration: CustomStringConvertible { let general: General let lifecycle: Lifecycle let runtimeEngine: RuntimeEngine diff --git a/Sources/AWSLambdaRuntimeCore/LambdaContext.swift b/Sources/AWSLambdaRuntimeCore/LambdaContext.swift index 943c4e5f..83737d92 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaContext.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaContext.swift @@ -197,19 +197,18 @@ public struct LambdaContext: CustomDebugStringConvertible, Sendable { let remaining = deadline - now return .milliseconds(remaining) } - + var tasks: DetachedTasksContainer { self.storage.tasks } - - + /// Registers a background task that continues running after the synchronous invocation has completed. /// This is useful for tasks like flushing metrics or performing clean-up operations without delaying the response. /// /// - Parameter body: An asynchronous closure that performs the background task. /// - Warning: You will be billed for the milliseconds of Lambda execution time until the very last /// background task is finished. - public func detachedBackgroundTask(_ body: @escaping @Sendable () async -> ()) { + public func detachedBackgroundTask(_ body: @escaping @Sendable () async -> Void) { Task { await self.tasks.detached(task: body) } diff --git a/Sources/AWSLambdaRuntimeCore/LambdaHandler.swift b/Sources/AWSLambdaRuntimeCore/LambdaHandler.swift index 3a7e3c27..a64f28e5 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaHandler.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaHandler.swift @@ -255,7 +255,7 @@ extension LambdaHandler { /// unchecked sendable wrapper for the handler /// this is safe since lambda runtime is designed to calls the handler serially @usableFromInline -internal struct UncheckedSendableHandler: @unchecked Sendable where Event == Underlying.Event, Output == Underlying.Output { +struct UncheckedSendableHandler: @unchecked Sendable where Event == Underlying.Event, Output == Underlying.Output { @usableFromInline let underlying: Underlying diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRequestID.swift b/Sources/AWSLambdaRuntimeCore/LambdaRequestID.swift index 86178ff4..13cb7e19 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRequestID.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRequestID.swift @@ -217,38 +217,38 @@ extension LambdaRequestID { // are safe and we don't need Swifts safety guards. characters.withUnsafeBufferPointer { lookup in - string.0 = lookup[Int(uuid.0 >> 4)] - string.1 = lookup[Int(uuid.0 & 0x0F)] - string.2 = lookup[Int(uuid.1 >> 4)] - string.3 = lookup[Int(uuid.1 & 0x0F)] - string.4 = lookup[Int(uuid.2 >> 4)] - string.5 = lookup[Int(uuid.2 & 0x0F)] - string.6 = lookup[Int(uuid.3 >> 4)] - string.7 = lookup[Int(uuid.3 & 0x0F)] - string.9 = lookup[Int(uuid.4 >> 4)] - string.10 = lookup[Int(uuid.4 & 0x0F)] - string.11 = lookup[Int(uuid.5 >> 4)] - string.12 = lookup[Int(uuid.5 & 0x0F)] - string.14 = lookup[Int(uuid.6 >> 4)] - string.15 = lookup[Int(uuid.6 & 0x0F)] - string.16 = lookup[Int(uuid.7 >> 4)] - string.17 = lookup[Int(uuid.7 & 0x0F)] - string.19 = lookup[Int(uuid.8 >> 4)] - string.20 = lookup[Int(uuid.8 & 0x0F)] - string.21 = lookup[Int(uuid.9 >> 4)] - string.22 = lookup[Int(uuid.9 & 0x0F)] - string.24 = lookup[Int(uuid.10 >> 4)] - string.25 = lookup[Int(uuid.10 & 0x0F)] - string.26 = lookup[Int(uuid.11 >> 4)] - string.27 = lookup[Int(uuid.11 & 0x0F)] - string.28 = lookup[Int(uuid.12 >> 4)] - string.29 = lookup[Int(uuid.12 & 0x0F)] - string.30 = lookup[Int(uuid.13 >> 4)] - string.31 = lookup[Int(uuid.13 & 0x0F)] - string.32 = lookup[Int(uuid.14 >> 4)] - string.33 = lookup[Int(uuid.14 & 0x0F)] - string.34 = lookup[Int(uuid.15 >> 4)] - string.35 = lookup[Int(uuid.15 & 0x0F)] + string.0 = lookup[Int(self.uuid.0 >> 4)] + string.1 = lookup[Int(self.uuid.0 & 0x0F)] + string.2 = lookup[Int(self.uuid.1 >> 4)] + string.3 = lookup[Int(self.uuid.1 & 0x0F)] + string.4 = lookup[Int(self.uuid.2 >> 4)] + string.5 = lookup[Int(self.uuid.2 & 0x0F)] + string.6 = lookup[Int(self.uuid.3 >> 4)] + string.7 = lookup[Int(self.uuid.3 & 0x0F)] + string.9 = lookup[Int(self.uuid.4 >> 4)] + string.10 = lookup[Int(self.uuid.4 & 0x0F)] + string.11 = lookup[Int(self.uuid.5 >> 4)] + string.12 = lookup[Int(self.uuid.5 & 0x0F)] + string.14 = lookup[Int(self.uuid.6 >> 4)] + string.15 = lookup[Int(self.uuid.6 & 0x0F)] + string.16 = lookup[Int(self.uuid.7 >> 4)] + string.17 = lookup[Int(self.uuid.7 & 0x0F)] + string.19 = lookup[Int(self.uuid.8 >> 4)] + string.20 = lookup[Int(self.uuid.8 & 0x0F)] + string.21 = lookup[Int(self.uuid.9 >> 4)] + string.22 = lookup[Int(self.uuid.9 & 0x0F)] + string.24 = lookup[Int(self.uuid.10 >> 4)] + string.25 = lookup[Int(self.uuid.10 & 0x0F)] + string.26 = lookup[Int(self.uuid.11 >> 4)] + string.27 = lookup[Int(self.uuid.11 & 0x0F)] + string.28 = lookup[Int(self.uuid.12 >> 4)] + string.29 = lookup[Int(self.uuid.12 & 0x0F)] + string.30 = lookup[Int(self.uuid.13 >> 4)] + string.31 = lookup[Int(self.uuid.13 & 0x0F)] + string.32 = lookup[Int(self.uuid.14 >> 4)] + string.33 = lookup[Int(self.uuid.14 & 0x0F)] + string.34 = lookup[Int(self.uuid.15 >> 4)] + string.35 = lookup[Int(self.uuid.15 & 0x0F)] } return string diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift b/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift index 87457f43..f2fcaa22 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift @@ -17,7 +17,7 @@ import Logging import NIOCore /// LambdaRunner manages the Lambda runtime workflow, or business logic. -internal final class LambdaRunner { +final class LambdaRunner { private let runtimeClient: LambdaRuntimeClient private let eventLoop: EventLoop private let allocator: ByteBufferAllocator @@ -105,7 +105,7 @@ internal final class LambdaRunner { // Do we want to await the tasks in this case? let promise = context.eventLoop.makePromise(of: Void.self) promise.completeWithTask { - return try await context.tasks.awaitAll().get() + try await context.tasks.awaitAll().get() } return promise.futureResult }.map { _ in context } diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift index c570a0b3..5349c5f8 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift @@ -204,7 +204,7 @@ public final class LambdaRuntime { case shuttingdown case shutdown - internal var order: Int { + var order: Int { switch self { case .idle: return 0 diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift index bcc65736..6fd0ac50 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift @@ -21,7 +21,7 @@ import NIOHTTP1 /// * /runtime/invocation/response /// * /runtime/invocation/error /// * /runtime/init/error -internal struct LambdaRuntimeClient { +struct LambdaRuntimeClient { private let eventLoop: EventLoop private let allocator = ByteBufferAllocator() private let httpClient: HTTPClient @@ -124,7 +124,7 @@ internal struct LambdaRuntimeClient { } } -internal enum LambdaRuntimeError: Error { +enum LambdaRuntimeError: Error { case badStatusCode(HTTPResponseStatus) case upstreamError(String) case invocationMissingHeader(String) @@ -134,10 +134,10 @@ internal enum LambdaRuntimeError: Error { } extension LambdaRuntimeClient { - internal static let defaultHeaders = HTTPHeaders([("user-agent", "Swift-Lambda/Unknown")]) + static let defaultHeaders = HTTPHeaders([("user-agent", "Swift-Lambda/Unknown")]) /// These headers must be sent along an invocation or initialization error report - internal static let errorHeaders = HTTPHeaders([ + static let errorHeaders = HTTPHeaders([ ("user-agent", "Swift-Lambda/Unknown"), ("lambda-runtime-function-error-type", "Unhandled"), ]) diff --git a/Sources/AWSLambdaRuntimeCore/Terminator.swift b/Sources/AWSLambdaRuntimeCore/Terminator.swift index cba8fd99..650b2a1d 100644 --- a/Sources/AWSLambdaRuntimeCore/Terminator.swift +++ b/Sources/AWSLambdaRuntimeCore/Terminator.swift @@ -56,7 +56,7 @@ public final class LambdaTerminator { /// - eventLoop: The `EventLoop` to run the termination on. /// /// - Returns: An `EventLoopFuture` with the result of the termination cycle. - internal func terminate(eventLoop: EventLoop) -> EventLoopFuture { + func terminate(eventLoop: EventLoop) -> EventLoopFuture { func terminate(_ iterator: IndexingIterator<[(name: String, handler: Handler)]>, errors: [Error], promise: EventLoopPromise) { var iterator = iterator guard let handler = iterator.next()?.handler else { diff --git a/Sources/AWSLambdaRuntimeCore/Utils.swift b/Sources/AWSLambdaRuntimeCore/Utils.swift index 9924a05b..7d53c5eb 100644 --- a/Sources/AWSLambdaRuntimeCore/Utils.swift +++ b/Sources/AWSLambdaRuntimeCore/Utils.swift @@ -15,7 +15,7 @@ import Dispatch import NIOPosix -internal enum Consts { +enum Consts { static let apiPrefix = "/2018-06-01" static let invocationURLPrefix = "\(apiPrefix)/runtime/invocation" static let getNextInvocationURLSuffix = "/next" @@ -27,7 +27,7 @@ internal enum Consts { } /// AWS Lambda HTTP Headers, used to populate the `LambdaContext` object. -internal enum AmazonHeaders { +enum AmazonHeaders { static let requestID = "Lambda-Runtime-Aws-Request-Id" static let traceID = "Lambda-Runtime-Trace-Id" static let clientContext = "X-Amz-Client-Context" @@ -37,7 +37,7 @@ internal enum AmazonHeaders { } /// Helper function to trap signals -internal func trap(signal sig: Signal, handler: @escaping (Signal) -> Void) -> DispatchSourceSignal { +func trap(signal sig: Signal, handler: @escaping (Signal) -> Void) -> DispatchSourceSignal { let signalSource = DispatchSource.makeSignalSource(signal: sig.rawValue, queue: DispatchQueue.global()) signal(sig.rawValue, SIG_IGN) signalSource.setEventHandler(handler: { @@ -48,7 +48,7 @@ internal func trap(signal sig: Signal, handler: @escaping (Signal) -> Void) -> D return signalSource } -internal enum Signal: Int32 { +enum Signal: Int32 { case HUP = 1 case INT = 2 case QUIT = 3 @@ -59,14 +59,14 @@ internal enum Signal: Int32 { } extension DispatchWallTime { - internal init(millisSinceEpoch: Int64) { + init(millisSinceEpoch: Int64) { let nanoSinceEpoch = UInt64(millisSinceEpoch) * 1_000_000 let seconds = UInt64(nanoSinceEpoch / 1_000_000_000) let nanoseconds = nanoSinceEpoch - (seconds * 1_000_000_000) self.init(timespec: timespec(tv_sec: Int(seconds), tv_nsec: Int(nanoseconds))) } - internal var millisSinceEpoch: Int64 { + var millisSinceEpoch: Int64 { Int64(bitPattern: self.rawValue) / -1_000_000 } } @@ -117,7 +117,7 @@ extension AmazonHeaders { /// # References /// - [Generating trace IDs](https://docs.aws.amazon.com/xray/latest/devguide/xray-api-sendingdata.html#xray-api-traceids) /// - [Tracing header](https://docs.aws.amazon.com/xray/latest/devguide/xray-concepts.html#xray-concepts-tracingheader) - internal static func generateXRayTraceID() -> String { + static func generateXRayTraceID() -> String { // The version number, that is, 1. let version: UInt = 1 // The time of the original request, in Unix epoch time, in 8 hexadecimal digits. diff --git a/Sources/MockServer/main.swift b/Sources/MockServer/main.swift index 9b995bd5..d0e73152 100644 --- a/Sources/MockServer/main.swift +++ b/Sources/MockServer/main.swift @@ -17,7 +17,7 @@ import NIOCore import NIOHTTP1 import NIOPosix -internal struct MockServer { +struct MockServer { private let group: EventLoopGroup private let host: String private let port: Int @@ -48,7 +48,7 @@ internal struct MockServer { } } -internal final class HTTPHandler: ChannelInboundHandler { +final class HTTPHandler: ChannelInboundHandler { public typealias InboundIn = HTTPServerRequestPart public typealias OutboundOut = HTTPServerResponsePart @@ -134,12 +134,12 @@ internal final class HTTPHandler: ChannelInboundHandler { } } -internal enum ServerError: Error { +enum ServerError: Error { case notReady case cantBind } -internal enum AmazonHeaders { +enum AmazonHeaders { static let requestID = "Lambda-Runtime-Aws-Request-Id" static let traceID = "Lambda-Runtime-Trace-Id" static let clientContext = "X-Amz-Client-Context" @@ -148,7 +148,7 @@ internal enum AmazonHeaders { static let invokedFunctionARN = "Lambda-Runtime-Invoked-Function-Arn" } -internal enum Mode: String { +enum Mode: String { case string case json } diff --git a/Tests/AWSLambdaRuntimeCoreTests/DetachedTasksTests.swift b/Tests/AWSLambdaRuntimeCoreTests/DetachedTasksTests.swift index b0ec42bc..41ccf758 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/DetachedTasksTests.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/DetachedTasksTests.swift @@ -13,51 +13,50 @@ //===----------------------------------------------------------------------===// @testable import AWSLambdaRuntimeCore +import Logging import NIO import XCTest -import Logging class DetachedTasksTest: XCTestCase { - actor Expectation { var isFulfilled = false func fulfill() { - isFulfilled = true + self.isFulfilled = true } } - + func testAwaitTasks() async throws { let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) defer { XCTAssertNoThrow(try eventLoopGroup.syncShutdownGracefully()) } - + let context = DetachedTasksContainer.Context( eventLoop: eventLoopGroup.next(), logger: Logger(label: "test") ) let expectation = Expectation() - + let container = DetachedTasksContainer(context: context) await container.detached { try! await Task.sleep(for: .milliseconds(200)) await expectation.fulfill() } - + try await container.awaitAll().get() let isFulfilled = await expectation.isFulfilled XCTAssert(isFulfilled) } - + func testAwaitChildrenTasks() async throws { let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) defer { XCTAssertNoThrow(try eventLoopGroup.syncShutdownGracefully()) } - + let context = DetachedTasksContainer.Context( eventLoop: eventLoopGroup.next(), logger: Logger(label: "test") ) let expectation1 = Expectation() let expectation2 = Expectation() - + let container = DetachedTasksContainer(context: context) await container.detached { await container.detached { @@ -70,7 +69,7 @@ class DetachedTasksTest: XCTestCase { await expectation2.fulfill() } } - + try await container.awaitAll().get() let isFulfilled1 = await expectation1.isFulfilled let isFulfilled2 = await expectation2.isFulfilled diff --git a/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift b/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift index c66162e6..47be5444 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift @@ -19,7 +19,7 @@ import NIOCore import NIOHTTP1 import NIOPosix -internal final class MockLambdaServer { +final class MockLambdaServer { private let logger = Logger(label: "MockLambdaServer") private let behavior: LambdaServerBehavior private let host: String @@ -72,7 +72,7 @@ internal final class MockLambdaServer { } } -internal final class HTTPHandler: ChannelInboundHandler { +final class HTTPHandler: ChannelInboundHandler { typealias InboundIn = HTTPServerRequestPart typealias OutboundOut = HTTPServerResponsePart @@ -213,35 +213,35 @@ internal final class HTTPHandler: ChannelInboundHandler { } } -internal protocol LambdaServerBehavior { +protocol LambdaServerBehavior { func getInvocation() -> GetInvocationResult func processResponse(requestId: String, response: String?) -> Result func processError(requestId: String, error: ErrorResponse) -> Result func processInitError(error: ErrorResponse) -> Result } -internal typealias GetInvocationResult = Result<(String, String), GetWorkError> +typealias GetInvocationResult = Result<(String, String), GetWorkError> -internal enum GetWorkError: Int, Error { +enum GetWorkError: Int, Error { case badRequest = 400 case tooManyRequests = 429 case internalServerError = 500 } -internal enum ProcessResponseError: Int, Error { +enum ProcessResponseError: Int, Error { case badRequest = 400 case payloadTooLarge = 413 case tooManyRequests = 429 case internalServerError = 500 } -internal enum ProcessErrorError: Int, Error { +enum ProcessErrorError: Int, Error { case invalidErrorShape = 299 case badRequest = 400 case internalServerError = 500 } -internal enum ServerError: Error { +enum ServerError: Error { case notReady case cantBind } diff --git a/Tests/AWSLambdaRuntimeCoreTests/Utils.swift b/Tests/AWSLambdaRuntimeCoreTests/Utils.swift index 8e2d3c38..97317326 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/Utils.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/Utils.swift @@ -109,7 +109,7 @@ struct TestError: Error, Equatable, CustomStringConvertible { } extension Date { - internal var millisSinceEpoch: Int64 { + var millisSinceEpoch: Int64 { Int64(self.timeIntervalSince1970 * 1000) } } From 5ecc24fa54e61756fe7a7a01f2451da1cffa916e Mon Sep 17 00:00:00 2001 From: Andrea Scuderi Date: Mon, 26 Aug 2024 13:00:07 +0200 Subject: [PATCH 015/177] Add Breeze to projects.md (#343) authored-by: Andrea Scuderi --- projects.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects.md b/projects.md index 0761440b..d6566d64 100644 --- a/projects.md +++ b/projects.md @@ -7,3 +7,7 @@ Provide a link to your code repository and a short description about your exampl - [GlobantPlus](https://github.com/fitomad/TechTalk-AWS-Lamba-Swift/). An imaginary streaming services with a tvOS application that interacts with the AWS API Gateway, AWS SQS services and a set of Lambdas that cover different aspects. Repository's documentation available in Spanish🇪🇸 and English🇺🇸. - [DocUploader](https://github.com/SwiftPackageIndex/DocUploader). DocUploader is a component of the Swift Package Index site. It receives zipped DocC documentation archives which can be quite large via an S3 inbox and proceeds to unzip and upload the documentation files to S3. - [Vapor's PennyBot](https://github.com/vapor/penny-bot). A collections of lambdas that handle events from GitHub for automatically creating releases for Vapor, handling new sponsors, automatically answering questions on Discord and providing 'pennies' - internet karma - to community members who help others or contribute to Vapor. +- [Breeze](https://github.com/swift-serverless/Breeze) A Serverless API Template Generator for Server-Side Swift. It supports template generation, creating swift package and deployment scripts for: + - Serverless REST API based on AWS APIGateway, Lambda, DynamoDB + - GitHub Webhook + - Webhook From ab8166a39dfeecd7eaf624e09d8db5d00d35432a Mon Sep 17 00:00:00 2001 From: Franz Busch Date: Mon, 26 Aug 2024 16:36:07 +0200 Subject: [PATCH 016/177] [CI] Add GHA CI and release flow (#340) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fabian Fett Co-authored-by: Sébastien Stormacq Co-authored-by: Mahdi Bahrami --- .github/release.yml | 15 ++ .github/workflows/pull_request.yml | 27 ++++ .licenseignore | 32 ++++ .swift-format | 62 ++++++++ .swiftformat | 19 --- Examples/Benchmark/Package.swift | 15 +- Examples/Deployment/Package.swift | 27 ++-- Examples/Echo/Package.swift | 15 +- Examples/ErrorHandling/Package.swift | 15 +- Examples/Foundation/Lambda.swift | 105 ++++++++----- Examples/Foundation/Package.swift | 15 +- Examples/JSON/Package.swift | 15 +- .../LocalDebugging/MyLambda/Package.swift | 9 +- Examples/LocalDebugging/Shared/Package.swift | 7 +- Examples/ResourcePackaging/Package.swift | 17 +- Examples/Testing/Package.swift | 11 +- Examples/Testing/Tests/LambdaTests.swift | 3 +- Package.swift | 79 ++++++---- Package@swift-5.7.swift | 73 --------- Package@swift-5.8.swift | 81 ++++++---- Plugins/AWSLambdaPackager/Plugin.swift | 63 ++++++-- .../AWSLambdaRuntime/Context+Foundation.swift | 1 + Sources/AWSLambdaRuntime/Docs.docc/index.md | 2 +- Sources/AWSLambdaRuntime/Lambda+Codable.swift | 5 +- .../ControlPlaneRequest.swift | 5 +- .../ControlPlaneRequestEncoder.swift | 14 +- .../Resources/code/03-02-01-package.swift | 2 +- .../Resources/code/03-02-02-package.swift | 4 +- .../Resources/code/03-02-03-package.swift | 6 +- .../Resources/code/03-02-04-package.swift | 8 +- .../Resources/code/03-02-05-package.swift | 10 +- .../Resources/code/03-03-01-main.swift | 1 - Sources/AWSLambdaRuntimeCore/HTTPClient.swift | 49 ++++-- .../Lambda+LocalServer.swift | 32 +++- Sources/AWSLambdaRuntimeCore/Lambda.swift | 21 ++- .../LambdaConfiguration.swift | 9 +- .../AWSLambdaRuntimeCore/LambdaContext.swift | 26 ++-- .../AWSLambdaRuntimeCore/LambdaHandler.swift | 11 +- .../LambdaRequestID.swift | 39 ++--- .../AWSLambdaRuntimeCore/LambdaRunner.swift | 29 ++-- .../AWSLambdaRuntimeCore/LambdaRuntime.swift | 15 +- .../LambdaRuntimeClient.swift | 9 +- Sources/AWSLambdaRuntimeCore/Terminator.swift | 6 +- Sources/AWSLambdaRuntimeCore/Utils.swift | 13 +- Sources/AWSLambdaTesting/Lambda+Testing.swift | 17 +- Sources/MockServer/main.swift | 7 +- .../ControlPlaneRequestEncoderTests.swift | 17 +- .../ControlPlaneRequestTests.swift | 3 +- .../DetachedTasksTests.swift | 3 +- .../LambdaHandlerTest.swift | 33 ++-- .../LambdaRequestIDTests.swift | 10 +- .../LambdaRunnerTest.swift | 47 ++++-- .../LambdaRuntimeClientTest.swift | 59 +++++-- .../LambdaRuntimeTest.swift | 68 +++++--- .../LambdaTest.swift | 34 ++-- .../MockLambdaServer.swift | 20 ++- Tests/AWSLambdaRuntimeCoreTests/Utils.swift | 41 +++-- .../AWSLambdaRuntimeCoreTests/UtilsTest.swift | 5 +- .../Lambda+CodableTest.swift | 5 +- readme.md | 4 +- scripts/check_no_api_breakages.sh | 68 -------- scripts/generate_contributors_list.sh | 39 ----- scripts/performance_test.sh | 10 +- scripts/preview_docc.sh | 30 ---- scripts/soundness.sh | 146 ------------------ 65 files changed, 885 insertions(+), 803 deletions(-) create mode 100644 .github/release.yml create mode 100644 .github/workflows/pull_request.yml create mode 100644 .licenseignore create mode 100644 .swift-format delete mode 100644 .swiftformat delete mode 100644 Package@swift-5.7.swift delete mode 100755 scripts/check_no_api_breakages.sh delete mode 100755 scripts/generate_contributors_list.sh delete mode 100755 scripts/preview_docc.sh delete mode 100755 scripts/soundness.sh diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 00000000..47505653 --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,15 @@ +changelog: + categories: + - title: SemVer Major + labels: + - ⚠️ semver/major + - title: SemVer Minor + labels: + - semver/minor + - title: SemVer Patch + labels: + - semver/patch + - title: Other Changes + labels: + - semver/none + - "*" diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml new file mode 100644 index 00000000..f0657f0d --- /dev/null +++ b/.github/workflows/pull_request.yml @@ -0,0 +1,27 @@ +name: PR + +on: + pull_request: + types: [opened, reopened, synchronize] + +jobs: + soundness: + name: Soundness + uses: apple/swift-nio/.github/workflows/soundness.yml@main + with: + license_header_check_project_name: "SwiftAWSLambdaRuntime" + shell_check_enabled: false + + unit-tests: + name: Unit tests + uses: apple/swift-nio/.github/workflows/unit_tests.yml@main + with: + linux_5_8_arguments_override: "-Xswiftc -warnings-as-errors --explicit-target-dependency-import-check error" + linux_5_9_arguments_override: "-Xswiftc -warnings-as-errors --explicit-target-dependency-import-check error" + linux_5_10_arguments_override: "-Xswiftc -warnings-as-errors --explicit-target-dependency-import-check error" + linux_nightly_6_0_arguments_override: "-Xswiftc -warnings-as-errors --explicit-target-dependency-import-check error" + linux_nightly_main_arguments_override: "-Xswiftc -warnings-as-errors --explicit-target-dependency-import-check error" + + swift-6-language-mode: + name: Swift 6 Language Mode + uses: apple/swift-nio/.github/workflows/swift_6_language_mode.yml@main diff --git a/.licenseignore b/.licenseignore new file mode 100644 index 00000000..c535d3fc --- /dev/null +++ b/.licenseignore @@ -0,0 +1,32 @@ +.gitignore +.licenseignore +.swiftformatignore +.spi.yml +.swift-format +.github/* +*.md +**/*.md +CONTRIBUTORS.txt +LICENSE.txt +NOTICE.txt +Package.swift +Package@swift-*.swift +Package.resolved +**/*.docc/* +**/.gitignore +**/Package.swift +**/Package.resolved +**/docker-compose*.yaml +**/docker/* +**/.dockerignore +**/Dockerfile +**/Makefile +**/*.html +**/*-template.yml +**/*.xcworkspace/* +**/*.xcodeproj/* +**/*.xcassets/* +**/*.appiconset/* +**/ResourcePackaging/hello.txt +.mailmap +.swiftformat diff --git a/.swift-format b/.swift-format new file mode 100644 index 00000000..7fa06fb3 --- /dev/null +++ b/.swift-format @@ -0,0 +1,62 @@ +{ + "version" : 1, + "indentation" : { + "spaces" : 4 + }, + "tabWidth" : 4, + "fileScopedDeclarationPrivacy" : { + "accessLevel" : "private" + }, + "spacesAroundRangeFormationOperators" : false, + "indentConditionalCompilationBlocks" : false, + "indentSwitchCaseLabels" : false, + "lineBreakAroundMultilineExpressionChainComponents" : false, + "lineBreakBeforeControlFlowKeywords" : false, + "lineBreakBeforeEachArgument" : true, + "lineBreakBeforeEachGenericRequirement" : true, + "lineLength" : 120, + "maximumBlankLines" : 1, + "respectsExistingLineBreaks" : true, + "prioritizeKeepingFunctionOutputTogether" : true, + "rules" : { + "AllPublicDeclarationsHaveDocumentation" : false, + "AlwaysUseLiteralForEmptyCollectionInit" : false, + "AlwaysUseLowerCamelCase" : false, + "AmbiguousTrailingClosureOverload" : true, + "BeginDocumentationCommentWithOneLineSummary" : false, + "DoNotUseSemicolons" : true, + "DontRepeatTypeInStaticProperties" : true, + "FileScopedDeclarationPrivacy" : true, + "FullyIndirectEnum" : true, + "GroupNumericLiterals" : true, + "IdentifiersMustBeASCII" : true, + "NeverForceUnwrap" : false, + "NeverUseForceTry" : false, + "NeverUseImplicitlyUnwrappedOptionals" : false, + "NoAccessLevelOnExtensionDeclaration" : true, + "NoAssignmentInExpressions" : true, + "NoBlockComments" : true, + "NoCasesWithOnlyFallthrough" : true, + "NoEmptyTrailingClosureParentheses" : true, + "NoLabelsInCasePatterns" : true, + "NoLeadingUnderscores" : false, + "NoParensAroundConditions" : true, + "NoVoidReturnOnFunctionSignature" : true, + "OmitExplicitReturns" : true, + "OneCasePerLine" : true, + "OneVariableDeclarationPerLine" : true, + "OnlyOneTrailingClosureArgument" : true, + "OrderedImports" : true, + "ReplaceForEachWithForLoop" : true, + "ReturnVoidInsteadOfEmptyTuple" : true, + "UseEarlyExits" : false, + "UseExplicitNilCheckInConditions" : false, + "UseLetInEveryBoundCaseVariable" : false, + "UseShorthandTypeNames" : true, + "UseSingleLinePropertyGetter" : false, + "UseSynthesizedInitializer" : false, + "UseTripleSlashForDocumentationComments" : true, + "UseWhereClausesInForLoops" : false, + "ValidateDocumentationComments" : false + } +} diff --git a/.swiftformat b/.swiftformat deleted file mode 100644 index 2458d1bc..00000000 --- a/.swiftformat +++ /dev/null @@ -1,19 +0,0 @@ -# file options - ---swiftversion 5.4 ---exclude .build - -# format options - ---self insert ---patternlet inline ---stripunusedargs unnamed-only ---ifdef no-indent ---extensionacl on-declarations ---disable typeSugar ---disable andOperator ---disable wrapMultilineStatementBraces ---disable enumNamespaces ---disable redundantExtensionACL - -# rules diff --git a/Examples/Benchmark/Package.swift b/Examples/Benchmark/Package.swift index c6370ce6..b1fd0840 100644 --- a/Examples/Benchmark/Package.swift +++ b/Examples/Benchmark/Package.swift @@ -1,33 +1,34 @@ // swift-tools-version:5.7 -import class Foundation.ProcessInfo // needed for CI to test the local version of the library import PackageDescription +import class Foundation.ProcessInfo // needed for CI to test the local version of the library + let package = Package( name: "swift-aws-lambda-runtime-example", platforms: [ - .macOS(.v12), + .macOS(.v12) ], products: [ - .executable(name: "MyLambda", targets: ["MyLambda"]), + .executable(name: "MyLambda", targets: ["MyLambda"]) ], dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha"), + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha") ], targets: [ .executableTarget( name: "MyLambda", dependencies: [ - .product(name: "AWSLambdaRuntimeCore", package: "swift-aws-lambda-runtime"), + .product(name: "AWSLambdaRuntimeCore", package: "swift-aws-lambda-runtime") ], path: "." - ), + ) ] ) // for CI to test the local version of the library if ProcessInfo.processInfo.environment["LAMBDA_USE_LOCAL_DEPS"] != nil { package.dependencies = [ - .package(name: "swift-aws-lambda-runtime", path: "../.."), + .package(name: "swift-aws-lambda-runtime", path: "../..") ] } diff --git a/Examples/Deployment/Package.swift b/Examples/Deployment/Package.swift index 51181f66..b5351201 100644 --- a/Examples/Deployment/Package.swift +++ b/Examples/Deployment/Package.swift @@ -1,12 +1,13 @@ // swift-tools-version:5.7 -import class Foundation.ProcessInfo // needed for CI to test the local version of the library import PackageDescription +import class Foundation.ProcessInfo // needed for CI to test the local version of the library + let package = Package( name: "swift-aws-lambda-runtime-samples", platforms: [ - .macOS(.v12), + .macOS(.v12) ], products: [ // introductory example @@ -16,21 +17,27 @@ let package = Package( // demonstrate different types of error handling ], dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha"), + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha") ], targets: [ - .executableTarget(name: "Benchmark", dependencies: [ - .product(name: "AWSLambdaRuntimeCore", package: "swift-aws-lambda-runtime"), - ]), - .executableTarget(name: "HelloWorld", dependencies: [ - .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), - ]), + .executableTarget( + name: "Benchmark", + dependencies: [ + .product(name: "AWSLambdaRuntimeCore", package: "swift-aws-lambda-runtime") + ] + ), + .executableTarget( + name: "HelloWorld", + dependencies: [ + .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") + ] + ), ] ) // for CI to test the local version of the library if ProcessInfo.processInfo.environment["LAMBDA_USE_LOCAL_DEPS"] != nil { package.dependencies = [ - .package(name: "swift-aws-lambda-runtime", path: "../.."), + .package(name: "swift-aws-lambda-runtime", path: "../..") ] } diff --git a/Examples/Echo/Package.swift b/Examples/Echo/Package.swift index a6d7ffef..5ae207a8 100644 --- a/Examples/Echo/Package.swift +++ b/Examples/Echo/Package.swift @@ -1,33 +1,34 @@ // swift-tools-version:5.7 -import class Foundation.ProcessInfo // needed for CI to test the local version of the library import PackageDescription +import class Foundation.ProcessInfo // needed for CI to test the local version of the library + let package = Package( name: "swift-aws-lambda-runtime-example", platforms: [ - .macOS(.v12), + .macOS(.v12) ], products: [ - .executable(name: "MyLambda", targets: ["MyLambda"]), + .executable(name: "MyLambda", targets: ["MyLambda"]) ], dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha"), + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha") ], targets: [ .executableTarget( name: "MyLambda", dependencies: [ - .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), + .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") ], path: "." - ), + ) ] ) // for CI to test the local version of the library if ProcessInfo.processInfo.environment["LAMBDA_USE_LOCAL_DEPS"] != nil { package.dependencies = [ - .package(name: "swift-aws-lambda-runtime", path: "../.."), + .package(name: "swift-aws-lambda-runtime", path: "../..") ] } diff --git a/Examples/ErrorHandling/Package.swift b/Examples/ErrorHandling/Package.swift index a6d7ffef..5ae207a8 100644 --- a/Examples/ErrorHandling/Package.swift +++ b/Examples/ErrorHandling/Package.swift @@ -1,33 +1,34 @@ // swift-tools-version:5.7 -import class Foundation.ProcessInfo // needed for CI to test the local version of the library import PackageDescription +import class Foundation.ProcessInfo // needed for CI to test the local version of the library + let package = Package( name: "swift-aws-lambda-runtime-example", platforms: [ - .macOS(.v12), + .macOS(.v12) ], products: [ - .executable(name: "MyLambda", targets: ["MyLambda"]), + .executable(name: "MyLambda", targets: ["MyLambda"]) ], dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha"), + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha") ], targets: [ .executableTarget( name: "MyLambda", dependencies: [ - .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), + .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") ], path: "." - ), + ) ] ) // for CI to test the local version of the library if ProcessInfo.processInfo.environment["LAMBDA_USE_LOCAL_DEPS"] != nil { package.dependencies = [ - .package(name: "swift-aws-lambda-runtime", path: "../.."), + .package(name: "swift-aws-lambda-runtime", path: "../..") ] } diff --git a/Examples/Foundation/Lambda.swift b/Examples/Foundation/Lambda.swift index 959c8e94..f58863b9 100644 --- a/Examples/Foundation/Lambda.swift +++ b/Examples/Foundation/Lambda.swift @@ -15,11 +15,12 @@ import AWSLambdaRuntime import Dispatch import Foundation +import Logging + #if canImport(FoundationNetworking) && canImport(FoundationXML) import FoundationNetworking import FoundationXML #endif -import Logging // MARK: - Run Lambda @@ -71,15 +72,17 @@ struct ExchangeRatesCalculator { func run(logger: Logger, callback: @escaping (Result<[Exchange], Swift.Error>) -> Void) { let startDate = Date() - let months = (1 ... 12).map { + let months = (1...12).map { self.calendar.date(byAdding: DateComponents(month: -$0), to: startDate)! } - self.download(logger: logger, - months: months, - monthIndex: months.startIndex, - currencies: Self.currencies, - state: [:]) { result in + self.download( + logger: logger, + months: months, + monthIndex: months.startIndex, + currencies: Self.currencies, + state: [:] + ) { result in switch result { case .failure(let error): @@ -89,7 +92,9 @@ struct ExchangeRatesCalculator { var result = [Exchange]() var previousData: [String: Decimal?] = [:] - for (_, exchangeRateData) in downloadedDataByMonth.filter({ $1.period != nil }).sorted(by: { $0.key < $1.key }) { + for (_, exchangeRateData) in downloadedDataByMonth.filter({ $1.period != nil }).sorted(by: { + $0.key < $1.key + }) { for (currencyCode, rate) in exchangeRateData.ratesByCurrencyCode.sorted(by: { $0.key < $1.key }) { if let rate = rate, let currencyEmoji = Self.currenciesEmojies[currencyCode] { let change: Exchange.Change @@ -103,11 +108,15 @@ struct ExchangeRatesCalculator { default: change = .unknown } - result.append(Exchange(date: exchangeRateData.period!.start, - from: .init(symbol: "GBP", emoji: "💷"), - to: .init(symbol: currencyCode, emoji: currencyEmoji), - rate: rate, - change: change)) + result.append( + Exchange( + date: exchangeRateData.period!.start, + from: .init(symbol: "GBP", emoji: "💷"), + to: .init(symbol: currencyCode, emoji: currencyEmoji), + rate: rate, + change: change + ) + ) } } previousData = exchangeRateData.ratesByCurrencyCode @@ -117,12 +126,14 @@ struct ExchangeRatesCalculator { } } - private func download(logger: Logger, - months: [Date], - monthIndex: Array.Index, - currencies: [String], - state: [Date: ExchangeRates], - callback: @escaping ((Result<[Date: ExchangeRates], Swift.Error>) -> Void)) { + private func download( + logger: Logger, + months: [Date], + monthIndex: Array.Index, + currencies: [String], + state: [Date: ExchangeRates], + callback: @escaping ((Result<[Date: ExchangeRates], Swift.Error>) -> Void) + ) { if monthIndex == months.count { return callback(.success(state)) } @@ -146,12 +157,14 @@ struct ExchangeRatesCalculator { } catch { return callback(.failure(error)) } - self.download(logger: logger, - months: months, - monthIndex: monthIndex.advanced(by: 1), - currencies: currencies, - state: newState, - callback: callback) + self.download( + logger: logger, + months: months, + monthIndex: monthIndex.advanced(by: 1), + currencies: currencies, + state: newState, + callback: callback + ) } dataTask.resume() } @@ -163,16 +176,18 @@ struct ExchangeRatesCalculator { dateFormatter.dateFormat = "dd/MMM/yy" let interval: DateInterval? if let period = try document.nodes(forXPath: "/exchangeRateMonthList/@Period").first?.stringValue, - period.count == 26 { + period.count == 26 + { // "01/Sep/2018 to 30/Sep/2018" - let startString = period[period.startIndex ..< period.index(period.startIndex, offsetBy: 11)] - let to = period[startString.endIndex ..< period.index(startString.endIndex, offsetBy: 4)] - let endString = period[to.endIndex ..< period.index(to.endIndex, offsetBy: 11)] + let startString = period[period.startIndex.. 1 && !configuration.explicitProducts { let productNames = configuration.products.map(\.name) - print("No explicit products named, building all executable products: '\(productNames.joined(separator: "', '"))'") + print( + "No explicit products named, building all executable products: '\(productNames.joined(separator: "', '"))'" + ) } let builtProducts: [LambdaProduct: Path] @@ -74,7 +76,9 @@ struct AWSLambdaPackager: CommandPlugin { verboseLogging: configuration.verboseLogging ) - print("\(archives.count > 0 ? archives.count.description : "no") archive\(archives.count != 1 ? "s" : "") created") + print( + "\(archives.count > 0 ? archives.count.description : "no") archive\(archives.count != 1 ? "s" : "") created" + ) for (product, archivePath) in archives { print(" * \(product.name) at \(archivePath.string)") } @@ -111,19 +115,25 @@ struct AWSLambdaPackager: CommandPlugin { let buildOutputPathCommand = "swift build -c \(buildConfiguration.rawValue) --show-bin-path" let dockerBuildOutputPath = try self.execute( executable: dockerToolPath, - arguments: ["run", "--rm", "-v", "\(packageDirectory.string):/workspace", "-w", "/workspace", baseImage, "bash", "-cl", buildOutputPathCommand], + arguments: [ + "run", "--rm", "-v", "\(packageDirectory.string):/workspace", "-w", "/workspace", baseImage, "bash", + "-cl", buildOutputPathCommand, + ], logLevel: verboseLogging ? .debug : .silent ) guard let buildPathOutput = dockerBuildOutputPath.split(separator: "\n").last else { throw Errors.failedParsingDockerOutput(dockerBuildOutputPath) } - let buildOutputPath = Path(buildPathOutput.replacingOccurrences(of: "/workspace", with: packageDirectory.string)) + let buildOutputPath = Path( + buildPathOutput.replacingOccurrences(of: "/workspace", with: packageDirectory.string) + ) // build the products var builtProducts = [LambdaProduct: Path]() for product in products { print("building \"\(product.name)\"") - let buildCommand = "swift build -c \(buildConfiguration.rawValue) --product \(product.name) --static-swift-stdlib" + let buildCommand = + "swift build -c \(buildConfiguration.rawValue) --product \(product.name) --static-swift-stdlib" if ProcessInfo.processInfo.environment["LAMBDA_USE_LOCAL_DEPS"] != nil { // when developing locally, we must have the full swift-aws-lambda-runtime project in the container // because Examples' Package.swift have a dependency on ../.. @@ -132,13 +142,20 @@ struct AWSLambdaPackager: CommandPlugin { let beforeLastComponent = packageDirectory.removingLastComponent().lastComponent try self.execute( executable: dockerToolPath, - arguments: ["run", "--rm", "--env", "LAMBDA_USE_LOCAL_DEPS=true", "-v", "\(packageDirectory.string)/../..:/workspace", "-w", "/workspace/\(beforeLastComponent)/\(lastComponent)", baseImage, "bash", "-cl", buildCommand], + arguments: [ + "run", "--rm", "--env", "LAMBDA_USE_LOCAL_DEPS=true", "-v", + "\(packageDirectory.string)/../..:/workspace", "-w", + "/workspace/\(beforeLastComponent)/\(lastComponent)", baseImage, "bash", "-cl", buildCommand, + ], logLevel: verboseLogging ? .debug : .output ) } else { try self.execute( executable: dockerToolPath, - arguments: ["run", "--rm", "-v", "\(packageDirectory.string):/workspace", "-w", "/workspace", baseImage, "bash", "-cl", buildCommand], + arguments: [ + "run", "--rm", "-v", "\(packageDirectory.string):/workspace", "-w", "/workspace", baseImage, + "bash", "-cl", buildCommand, + ], logLevel: verboseLogging ? .debug : .output ) } @@ -210,7 +227,10 @@ struct AWSLambdaPackager: CommandPlugin { let relocatedArtifactPath = workingDirectory.appending(artifactPath.lastComponent) let symbolicLinkPath = workingDirectory.appending("bootstrap") try FileManager.default.copyItem(atPath: artifactPath.string, toPath: relocatedArtifactPath.string) - try FileManager.default.createSymbolicLink(atPath: symbolicLinkPath.string, withDestinationPath: relocatedArtifactPath.lastComponent) + try FileManager.default.createSymbolicLink( + atPath: symbolicLinkPath.string, + withDestinationPath: relocatedArtifactPath.lastComponent + ) var arguments: [String] = [] #if os(macOS) || os(Linux) @@ -231,7 +251,10 @@ struct AWSLambdaPackager: CommandPlugin { let resourcesDirectory = artifactDirectory.appending(resourcesDirectoryName) let relocatedResourcesDirectory = workingDirectory.appending(resourcesDirectoryName) if FileManager.default.fileExists(atPath: resourcesDirectory.string) { - try FileManager.default.copyItem(atPath: resourcesDirectory.string, toPath: relocatedResourcesDirectory.string) + try FileManager.default.copyItem( + atPath: resourcesDirectory.string, + toPath: relocatedResourcesDirectory.string + ) arguments.append(resourcesDirectoryName) } @@ -268,7 +291,11 @@ struct AWSLambdaPackager: CommandPlugin { outputSync.enter() defer { outputSync.leave() } - guard let _output = data.flatMap({ String(data: $0, encoding: .utf8)?.trimmingCharacters(in: CharacterSet(["\n"])) }), !_output.isEmpty else { + guard + let _output = data.flatMap({ + String(data: $0, encoding: .utf8)?.trimmingCharacters(in: CharacterSet(["\n"])) + }), !_output.isEmpty + else { return } @@ -285,7 +312,9 @@ struct AWSLambdaPackager: CommandPlugin { } let pipe = Pipe() - pipe.fileHandleForReading.readabilityHandler = { fileHandle in outputQueue.async { outputHandler(fileHandle.availableData) } } + pipe.fileHandleForReading.readabilityHandler = { fileHandle in + outputQueue.async { outputHandler(fileHandle.availableData) } + } let process = Process() process.standardOutput = pipe @@ -320,7 +349,9 @@ struct AWSLambdaPackager: CommandPlugin { } private func isAmazonLinux2() -> Bool { - if let data = FileManager.default.contents(atPath: "/etc/system-release"), let release = String(data: data, encoding: .utf8) { + if let data = FileManager.default.contents(atPath: "/etc/system-release"), + let release = String(data: data, encoding: .utf8) + { return release.hasPrefix("Amazon Linux release 2") } else { return false @@ -354,7 +385,8 @@ private struct Configuration: CustomStringConvertible { if let outputPath = outputPathArgument.first { var isDirectory: ObjCBool = false - guard FileManager.default.fileExists(atPath: outputPath, isDirectory: &isDirectory), isDirectory.boolValue else { + guard FileManager.default.fileExists(atPath: outputPath, isDirectory: &isDirectory), isDirectory.boolValue + else { throw Errors.invalidArgument("invalid output directory '\(outputPath)'") } self.outputDirectory = Path(outputPath) @@ -389,8 +421,9 @@ private struct Configuration: CustomStringConvertible { throw Errors.invalidArgument("--swift-version and --base-docker-image are mutually exclusive") } - let swiftVersion = swiftVersionArgument.first ?? .none // undefined version will yield the latest docker image - self.baseDockerImage = baseDockerImageArgument.first ?? "swift:\(swiftVersion.map { $0 + "-" } ?? "")amazonlinux2" + let swiftVersion = swiftVersionArgument.first ?? .none // undefined version will yield the latest docker image + self.baseDockerImage = + baseDockerImageArgument.first ?? "swift:\(swiftVersion.map { $0 + "-" } ?? "")amazonlinux2" self.disableDockerImageUpdate = disableDockerImageUpdateArgument diff --git a/Sources/AWSLambdaRuntime/Context+Foundation.swift b/Sources/AWSLambdaRuntime/Context+Foundation.swift index 780e1509..a83237a7 100644 --- a/Sources/AWSLambdaRuntime/Context+Foundation.swift +++ b/Sources/AWSLambdaRuntime/Context+Foundation.swift @@ -13,6 +13,7 @@ //===----------------------------------------------------------------------===// import AWSLambdaRuntimeCore + import struct Foundation.Date extension LambdaContext { diff --git a/Sources/AWSLambdaRuntime/Docs.docc/index.md b/Sources/AWSLambdaRuntime/Docs.docc/index.md index 0470c73b..50920dbd 100644 --- a/Sources/AWSLambdaRuntime/Docs.docc/index.md +++ b/Sources/AWSLambdaRuntime/Docs.docc/index.md @@ -118,7 +118,7 @@ First, add a dependency on the event packages: } ``` - Modeling Lambda functions as Closures is both simple and safe. Swift AWS Lambda Runtime will ensure that the user-provided code is offloaded from the network processing thread such that even if the code becomes slow to respond or gets hang, the underlying process can continue to function. This safety comes at a small performance penalty from context switching between threads. In many cases, the simplicity and safety of using the Closure based API is often preferred over the complexity of the performance-oriented API. + Modeling Lambda functions as Closures is both simple and safe. Swift AWS Lambda Runtime will ensure that the user-provided code is offloaded from the network processing thread such that even if the code becomes slow to respond or gets stuck, the underlying process can continue to function. This safety comes at a small performance penalty from context switching between threads. In many cases, the simplicity and safety of using the Closure based API is often preferred over the complexity of the performance-oriented API. ### Using EventLoopLambdaHandler diff --git a/Sources/AWSLambdaRuntime/Lambda+Codable.swift b/Sources/AWSLambdaRuntime/Lambda+Codable.swift index f925754b..3f80ee17 100644 --- a/Sources/AWSLambdaRuntime/Lambda+Codable.swift +++ b/Sources/AWSLambdaRuntime/Lambda+Codable.swift @@ -13,11 +13,12 @@ //===----------------------------------------------------------------------===// @_exported import AWSLambdaRuntimeCore +import NIOCore +import NIOFoundationCompat + import struct Foundation.Data import class Foundation.JSONDecoder import class Foundation.JSONEncoder -import NIOCore -import NIOFoundationCompat // MARK: - SimpleLambdaHandler Codable support diff --git a/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift b/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift index 5c089a5c..6c29344c 100644 --- a/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift +++ b/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift @@ -42,7 +42,7 @@ struct Invocation: Hashable { } guard let deadline = headers.first(name: AmazonHeaders.deadline), - let unixTimeInMilliseconds = Int64(deadline) + let unixTimeInMilliseconds = Int64(deadline) else { throw LambdaRuntimeError.invocationMissingHeader(AmazonHeaders.deadline) } @@ -54,7 +54,8 @@ struct Invocation: Hashable { self.requestID = requestID self.deadlineInMillisSinceEpoch = unixTimeInMilliseconds self.invokedFunctionARN = invokedFunctionARN - self.traceID = headers.first(name: AmazonHeaders.traceID) ?? "Root=\(AmazonHeaders.generateXRayTraceID());Sampled=0" + self.traceID = + headers.first(name: AmazonHeaders.traceID) ?? "Root=\(AmazonHeaders.generateXRayTraceID());Sampled=0" self.clientContext = headers["Lambda-Runtime-Client-Context"].first self.cognitoIdentity = headers["Lambda-Runtime-Cognito-Identity"].first } diff --git a/Sources/AWSLambdaRuntimeCore/ControlPlaneRequestEncoder.swift b/Sources/AWSLambdaRuntimeCore/ControlPlaneRequestEncoder.swift index a91e1e44..31e64d27 100644 --- a/Sources/AWSLambdaRuntimeCore/ControlPlaneRequestEncoder.swift +++ b/Sources/AWSLambdaRuntimeCore/ControlPlaneRequestEncoder.swift @@ -24,7 +24,11 @@ struct ControlPlaneRequestEncoder: _EmittingChannelHandler { self.host = host } - mutating func writeRequest(_ request: ControlPlaneRequest, context: ChannelHandlerContext, promise: EventLoopPromise?) { + mutating func writeRequest( + _ request: ControlPlaneRequest, + context: ChannelHandlerContext, + promise: EventLoopPromise? + ) { self.byteBuffer.clear(minimumCapacity: self.byteBuffer.storageCapacity) switch request { @@ -32,7 +36,7 @@ struct ControlPlaneRequestEncoder: _EmittingChannelHandler { self.byteBuffer.writeString(.nextInvocationRequestLine) self.byteBuffer.writeHostHeader(host: self.host) self.byteBuffer.writeString(.userAgentHeader) - self.byteBuffer.writeString(.CRLF) // end of head + self.byteBuffer.writeString(.CRLF) // end of head context.write(self.wrapOutboundOut(self.byteBuffer), promise: promise) context.flush() @@ -42,7 +46,7 @@ struct ControlPlaneRequestEncoder: _EmittingChannelHandler { self.byteBuffer.writeHostHeader(host: self.host) self.byteBuffer.writeString(.userAgentHeader) self.byteBuffer.writeContentLengthHeader(length: contentLength) - self.byteBuffer.writeString(.CRLF) // end of head + self.byteBuffer.writeString(.CRLF) // end of head if let payload = payload, contentLength > 0 { context.write(self.wrapOutboundOut(self.byteBuffer), promise: nil) context.write(self.wrapOutboundOut(payload), promise: promise) @@ -58,7 +62,7 @@ struct ControlPlaneRequestEncoder: _EmittingChannelHandler { self.byteBuffer.writeHostHeader(host: self.host) self.byteBuffer.writeString(.userAgentHeader) self.byteBuffer.writeString(.unhandledErrorHeader) - self.byteBuffer.writeString(.CRLF) // end of head + self.byteBuffer.writeString(.CRLF) // end of head self.byteBuffer.writeBytes(payload) context.write(self.wrapOutboundOut(self.byteBuffer), promise: promise) context.flush() @@ -70,7 +74,7 @@ struct ControlPlaneRequestEncoder: _EmittingChannelHandler { self.byteBuffer.writeHostHeader(host: self.host) self.byteBuffer.writeString(.userAgentHeader) self.byteBuffer.writeString(.unhandledErrorHeader) - self.byteBuffer.writeString(.CRLF) // end of head + self.byteBuffer.writeString(.CRLF) // end of head self.byteBuffer.writeBytes(payload) context.write(self.wrapOutboundOut(self.byteBuffer), promise: promise) context.flush() diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-01-package.swift b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-01-package.swift index dada42b4..9c5606b2 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-01-package.swift +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-01-package.swift @@ -4,5 +4,5 @@ import PackageDescription let package = Package( - name: "SquareNumberLambda", + name: "SquareNumberLambda" ) diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-02-package.swift b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-02-package.swift index 40b9f784..e78f05ad 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-02-package.swift +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-02-package.swift @@ -6,6 +6,6 @@ import PackageDescription let package = Package( name: "SquareNumberLambda", platforms: [ - .macOS(.v12), - ], + .macOS(.v12) + ] ) diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-03-package.swift b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-03-package.swift index 88258ed8..d887ccc1 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-03-package.swift +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-03-package.swift @@ -6,9 +6,9 @@ import PackageDescription let package = Package( name: "SquareNumberLambda", platforms: [ - .macOS(.v12), + .macOS(.v12) ], dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha"), - ], + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha") + ] ) diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-04-package.swift b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-04-package.swift index b1d69ed5..3afdaae5 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-04-package.swift +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-04-package.swift @@ -6,12 +6,12 @@ import PackageDescription let package = Package( name: "SquareNumberLambda", platforms: [ - .macOS(.v12), + .macOS(.v12) ], products: [ - .executable(name: "SquareNumberLambda", targets: ["SquareNumberLambda"]), + .executable(name: "SquareNumberLambda", targets: ["SquareNumberLambda"]) ], dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha"), - ], + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha") + ] ) diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-05-package.swift b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-05-package.swift index bd9f7290..68ef3130 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-05-package.swift +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-05-package.swift @@ -6,21 +6,21 @@ import PackageDescription let package = Package( name: "SquareNumberLambda", platforms: [ - .macOS(.v12), + .macOS(.v12) ], products: [ - .executable(name: "SquareNumberLambda", targets: ["SquareNumberLambda"]), + .executable(name: "SquareNumberLambda", targets: ["SquareNumberLambda"]) ], dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha"), + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha") ], targets: [ .executableTarget( name: "SquareNumberLambda", dependencies: [ - .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), + .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") ], path: "." - ), + ) ] ) diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-01-main.swift b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-01-main.swift index 35d722a6..58d19b38 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-01-main.swift +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-01-main.swift @@ -1,3 +1,2 @@ - @main struct SquareNumberHandler: SimpleLambdaHandler {} diff --git a/Sources/AWSLambdaRuntimeCore/HTTPClient.swift b/Sources/AWSLambdaRuntimeCore/HTTPClient.swift index c5cf91e0..68289a92 100644 --- a/Sources/AWSLambdaRuntimeCore/HTTPClient.swift +++ b/Sources/AWSLambdaRuntimeCore/HTTPClient.swift @@ -35,20 +35,33 @@ final class HTTPClient { } func get(url: String, headers: HTTPHeaders, timeout: TimeAmount? = nil) -> EventLoopFuture { - self.execute(Request(targetHost: self.targetHost, - url: url, - method: .GET, - headers: headers, - timeout: timeout ?? self.configuration.requestTimeout)) + self.execute( + Request( + targetHost: self.targetHost, + url: url, + method: .GET, + headers: headers, + timeout: timeout ?? self.configuration.requestTimeout + ) + ) } - func post(url: String, headers: HTTPHeaders, body: ByteBuffer?, timeout: TimeAmount? = nil) -> EventLoopFuture { - self.execute(Request(targetHost: self.targetHost, - url: url, - method: .POST, - headers: headers, - body: body, - timeout: timeout ?? self.configuration.requestTimeout)) + func post( + url: String, + headers: HTTPHeaders, + body: ByteBuffer?, + timeout: TimeAmount? = nil + ) -> EventLoopFuture { + self.execute( + Request( + targetHost: self.targetHost, + url: url, + method: .POST, + headers: headers, + body: body, + timeout: timeout ?? self.configuration.requestTimeout + ) + ) } /// cancels the current request if there is one @@ -103,7 +116,8 @@ final class HTTPClient { // Lambda quotas... An invocation payload is maximal 6MB in size: // https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html try channel.pipeline.syncOperations.addHandler( - NIOHTTPClientResponseAggregator(maxContentLength: 6 * 1024 * 1024)) + NIOHTTPClientResponseAggregator(maxContentLength: 6 * 1024 * 1024) + ) try channel.pipeline.syncOperations.addHandler(LambdaChannelHandler()) return channel.eventLoop.makeSucceededFuture(()) } catch { @@ -128,7 +142,14 @@ final class HTTPClient { let body: ByteBuffer? let timeout: TimeAmount? - init(targetHost: String, url: String, method: HTTPMethod = .GET, headers: HTTPHeaders = HTTPHeaders(), body: ByteBuffer? = nil, timeout: TimeAmount?) { + init( + targetHost: String, + url: String, + method: HTTPMethod = .GET, + headers: HTTPHeaders = HTTPHeaders(), + body: ByteBuffer? = nil, + timeout: TimeAmount? + ) { self.targetHost = targetHost self.url = url self.method = method diff --git a/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift b/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift index 7c91870f..d2a1ebbf 100644 --- a/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift +++ b/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift @@ -36,7 +36,8 @@ extension Lambda { /// - body: Code to run within the context of the mock server. Typically this would be a Lambda.run function call. /// /// - note: This API is designed strictly for local testing and is behind a DEBUG flag - static func withLocalServer(invocationEndpoint: String? = nil, _ body: @escaping () -> Value) throws -> Value { + static func withLocalServer(invocationEndpoint: String? = nil, _ body: @escaping () -> Value) throws -> Value + { let server = LocalLambda.Server(invocationEndpoint: invocationEndpoint) try server.start().wait() defer { try! server.stop() } @@ -70,14 +71,18 @@ private enum LocalLambda { .serverChannelOption(ChannelOptions.socket(SocketOptionLevel(SOL_SOCKET), SO_REUSEADDR), value: 1) .childChannelInitializer { channel in channel.pipeline.configureHTTPServerPipeline(withErrorHandling: true).flatMap { _ in - channel.pipeline.addHandler(HTTPHandler(logger: self.logger, invocationEndpoint: self.invocationEndpoint)) + channel.pipeline.addHandler( + HTTPHandler(logger: self.logger, invocationEndpoint: self.invocationEndpoint) + ) } } return bootstrap.bind(host: self.host, port: self.port).flatMap { channel -> EventLoopFuture in guard channel.localAddress != nil else { return channel.eventLoop.makeFailedFuture(ServerError.cantBind) } - self.logger.info("LocalLambdaServer started and listening on \(self.host):\(self.port), receiving events on \(self.invocationEndpoint)") + self.logger.info( + "LocalLambdaServer started and listening on \(self.host):\(self.port), receiving events on \(self.invocationEndpoint)" + ) return channel.eventLoop.makeSucceededFuture(()) } } @@ -131,7 +136,7 @@ private enum LocalLambda { guard let work = request.body else { return self.writeResponse(context: context, response: .init(status: .badRequest)) } - let requestID = "\(DispatchTime.now().uptimeNanoseconds)" // FIXME: + let requestID = "\(DispatchTime.now().uptimeNanoseconds)" // FIXME: let promise = context.eventLoop.makePromise(of: Response.self) promise.futureResult.whenComplete { result in switch result { @@ -200,7 +205,9 @@ private enum LocalLambda { } guard requestID == invocation.requestID else { // the request's requestId is not matching the one we are expecting - self.logger.error("invalid invocation state request ID \(requestID) does not match expected \(invocation.requestID)") + self.logger.error( + "invalid invocation state request ID \(requestID) does not match expected \(invocation.requestID)" + ) return self.writeResponse(context: context, status: .badRequest) } @@ -222,7 +229,9 @@ private enum LocalLambda { } guard requestID == invocation.requestID else { // the request's requestId is not matching the one we are expecting - self.logger.error("invalid invocation state request ID \(requestID) does not match expected \(invocation.requestID)") + self.logger.error( + "invalid invocation state request ID \(requestID) does not match expected \(invocation.requestID)" + ) return self.writeResponse(context: context, status: .badRequest) } @@ -243,7 +252,11 @@ private enum LocalLambda { func writeResponse(context: ChannelHandlerContext, response: Response) { var headers = HTTPHeaders(response.headers ?? []) headers.add(name: "content-length", value: "\(response.body?.readableBytes ?? 0)") - let head = HTTPResponseHead(version: HTTPVersion(major: 1, minor: 1), status: response.status, headers: headers) + let head = HTTPResponseHead( + version: HTTPVersion(major: 1, minor: 1), + status: response.status, + headers: headers + ) context.write(wrapOutboundOut(.head(head))).whenFailure { error in self.logger.error("\(self) write error \(error)") @@ -279,7 +292,10 @@ private enum LocalLambda { // required headers response.headers = [ (AmazonHeaders.requestID, self.requestID), - (AmazonHeaders.invokedFunctionARN, "arn:aws:lambda:us-east-1:\(Int16.random(in: Int16.min ... Int16.max)):function:custom-runtime"), + ( + AmazonHeaders.invokedFunctionARN, + "arn:aws:lambda:us-east-1:\(Int16.random(in: Int16.min ... Int16.max)):function:custom-runtime" + ), (AmazonHeaders.traceID, "Root=\(AmazonHeaders.generateXRayTraceID());Sampled=1"), (AmazonHeaders.deadline, "\(DispatchWallTime.distantFuture.millisSinceEpoch)"), ] diff --git a/Sources/AWSLambdaRuntimeCore/Lambda.swift b/Sources/AWSLambdaRuntimeCore/Lambda.swift index def18c35..d4b7363d 100644 --- a/Sources/AWSLambdaRuntimeCore/Lambda.swift +++ b/Sources/AWSLambdaRuntimeCore/Lambda.swift @@ -12,6 +12,10 @@ // //===----------------------------------------------------------------------===// +import Logging +import NIOCore +import NIOPosix + #if os(macOS) import Darwin.C #elseif canImport(Glibc) @@ -27,9 +31,6 @@ import ucrt #if swift(<5.9) import Backtrace #endif -import Logging -import NIOCore -import NIOPosix public enum Lambda { /// Run a Lambda defined by implementing the ``SimpleLambdaHandler`` protocol. @@ -44,7 +45,10 @@ public enum Lambda { configuration: LambdaConfiguration = .init(), handlerType: Handler.Type ) -> Result { - self.run(configuration: configuration, handlerProvider: CodableSimpleLambdaHandler.makeHandler(context:)) + self.run( + configuration: configuration, + handlerProvider: CodableSimpleLambdaHandler.makeHandler(context:) + ) } /// Run a Lambda defined by implementing the ``LambdaHandler`` protocol. @@ -76,7 +80,10 @@ public enum Lambda { configuration: LambdaConfiguration = .init(), handlerType: Handler.Type ) -> Result { - self.run(configuration: configuration, handlerProvider: CodableEventLoopLambdaHandler.makeHandler(context:)) + self.run( + configuration: configuration, + handlerProvider: CodableEventLoopLambdaHandler.makeHandler(context:) + ) } /// Run a Lambda defined by implementing the ``ByteBufferLambdaHandler`` protocol. @@ -149,7 +156,9 @@ public enum Lambda { #if DEBUG if Lambda.env("LOCAL_LAMBDA_SERVER_ENABLED").flatMap(Bool.init) ?? false { do { - return try Lambda.withLocalServer(invocationEndpoint: Lambda.env("LOCAL_LAMBDA_SERVER_INVOCATION_ENDPOINT")) { + return try Lambda.withLocalServer( + invocationEndpoint: Lambda.env("LOCAL_LAMBDA_SERVER_INVOCATION_ENDPOINT") + ) { _run(configuration) } } catch { diff --git a/Sources/AWSLambdaRuntimeCore/LambdaConfiguration.swift b/Sources/AWSLambdaRuntimeCore/LambdaConfiguration.swift index a1b739dd..44489de3 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaConfiguration.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaConfiguration.swift @@ -51,7 +51,8 @@ struct LambdaConfiguration: CustomStringConvertible { init(id: String? = nil, maxTimes: Int? = nil, stopSignal: Signal? = nil) { self.id = id ?? "\(DispatchTime.now().uptimeNanoseconds)" self.maxTimes = maxTimes ?? Lambda.env("MAX_REQUESTS").flatMap(Int.init) ?? 0 - self.stopSignal = stopSignal ?? Lambda.env("STOP_SIGNAL").flatMap(Int32.init).flatMap(Signal.init) ?? Signal.TERM + self.stopSignal = + stopSignal ?? Lambda.env("STOP_SIGNAL").flatMap(Int32.init).flatMap(Signal.init) ?? Signal.TERM precondition(self.maxTimes >= 0, "maxTimes must be equal or larger than 0") } @@ -66,13 +67,15 @@ struct LambdaConfiguration: CustomStringConvertible { let requestTimeout: TimeAmount? init(address: String? = nil, keepAlive: Bool? = nil, requestTimeout: TimeAmount? = nil) { - let ipPort = (address ?? Lambda.env("AWS_LAMBDA_RUNTIME_API"))?.split(separator: ":") ?? ["127.0.0.1", "7000"] + let ipPort = + (address ?? Lambda.env("AWS_LAMBDA_RUNTIME_API"))?.split(separator: ":") ?? ["127.0.0.1", "7000"] guard ipPort.count == 2, let port = Int(ipPort[1]) else { preconditionFailure("invalid ip+port configuration \(ipPort)") } self.ip = String(ipPort[0]) self.port = port - self.requestTimeout = requestTimeout ?? Lambda.env("REQUEST_TIMEOUT").flatMap(Int64.init).flatMap { .milliseconds($0) } + self.requestTimeout = + requestTimeout ?? Lambda.env("REQUEST_TIMEOUT").flatMap(Int64.init).flatMap { .milliseconds($0) } } var description: String { diff --git a/Sources/AWSLambdaRuntimeCore/LambdaContext.swift b/Sources/AWSLambdaRuntimeCore/LambdaContext.swift index 83737d92..a7019757 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaContext.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaContext.swift @@ -12,15 +12,15 @@ // //===----------------------------------------------------------------------===// +import Logging +import NIOCore + #if swift(<5.9) @preconcurrency import Dispatch #else import Dispatch #endif -import Logging -import NIOCore - // MARK: - InitializationContext /// Lambda runtime initialization context. @@ -162,15 +162,17 @@ public struct LambdaContext: CustomDebugStringConvertible, Sendable { self.storage.allocator } - init(requestID: String, - traceID: String, - invokedFunctionARN: String, - deadline: DispatchWallTime, - cognitoIdentity: String? = nil, - clientContext: String? = nil, - logger: Logger, - eventLoop: EventLoop, - allocator: ByteBufferAllocator) { + init( + requestID: String, + traceID: String, + invokedFunctionARN: String, + deadline: DispatchWallTime, + cognitoIdentity: String? = nil, + clientContext: String? = nil, + logger: Logger, + eventLoop: EventLoop, + allocator: ByteBufferAllocator + ) { self.storage = _Storage( requestID: requestID, traceID: traceID, diff --git a/Sources/AWSLambdaRuntimeCore/LambdaHandler.swift b/Sources/AWSLambdaRuntimeCore/LambdaHandler.swift index a64f28e5..9ff6f330 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaHandler.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaHandler.swift @@ -48,8 +48,6 @@ public protocol SimpleLambdaHandler { /// - parameters: /// - value: Response of type ``Output``. /// - buffer: A `ByteBuffer` to encode into, will be overwritten. - /// - /// - Returns: A `ByteBuffer` with the encoded version of the `value`. func encode(value: Output, into buffer: inout ByteBuffer) throws /// Decode a `ByteBuffer` to a request or event of type ``Event``. @@ -170,8 +168,6 @@ public protocol LambdaHandler { /// - parameters: /// - value: Response of type ``Output``. /// - buffer: A `ByteBuffer` to encode into, will be overwritten. - /// - /// - Returns: A `ByteBuffer` with the encoded version of the `value`. func encode(value: Output, into buffer: inout ByteBuffer) throws /// Decode a `ByteBuffer` to a request or event of type ``Event``. @@ -255,7 +251,8 @@ extension LambdaHandler { /// unchecked sendable wrapper for the handler /// this is safe since lambda runtime is designed to calls the handler serially @usableFromInline -struct UncheckedSendableHandler: @unchecked Sendable where Event == Underlying.Event, Output == Underlying.Output { +struct UncheckedSendableHandler: @unchecked Sendable +where Event == Underlying.Event, Output == Underlying.Output { @usableFromInline let underlying: Underlying @@ -411,8 +408,8 @@ public protocol ByteBufferLambdaHandler: LambdaRuntimeHandler { /// Concrete Lambda handlers implement this method to provide the Lambda functionality. /// /// - parameters: + /// - buffer: The event or input payload encoded as `ByteBuffer`. /// - context: Runtime ``LambdaContext``. - /// - event: The event or input payload encoded as `ByteBuffer`. /// /// - Returns: An `EventLoopFuture` to report the result of the Lambda back to the runtime engine. /// The `EventLoopFuture` should be completed with either a response encoded as `ByteBuffer` or an `Error`. @@ -447,8 +444,8 @@ public protocol LambdaRuntimeHandler { /// Concrete Lambda handlers implement this method to provide the Lambda functionality. /// /// - parameters: + /// - buffer: The event or input payload encoded as `ByteBuffer`. /// - context: Runtime ``LambdaContext``. - /// - event: The event or input payload encoded as `ByteBuffer`. /// /// - Returns: An `EventLoopFuture` to report the result of the Lambda back to the runtime engine. /// The `EventLoopFuture` should be completed with either a response encoded as `ByteBuffer` or an `Error`. diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRequestID.swift b/Sources/AWSLambdaRuntimeCore/LambdaRequestID.swift index 13cb7e19..22a4275e 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRequestID.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRequestID.swift @@ -18,7 +18,9 @@ import NIOCore // https://github.com/swift-extras/swift-extras-uuid struct LambdaRequestID { - typealias uuid_t = (UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8) + typealias uuid_t = ( + UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8 + ) var uuid: uuid_t { self._uuid @@ -114,22 +116,12 @@ struct LambdaRequestID { extension LambdaRequestID: Equatable { // sadly no auto conformance from the compiler static func == (lhs: Self, rhs: Self) -> Bool { - lhs._uuid.0 == rhs._uuid.0 && - lhs._uuid.1 == rhs._uuid.1 && - lhs._uuid.2 == rhs._uuid.2 && - lhs._uuid.3 == rhs._uuid.3 && - lhs._uuid.4 == rhs._uuid.4 && - lhs._uuid.5 == rhs._uuid.5 && - lhs._uuid.6 == rhs._uuid.6 && - lhs._uuid.7 == rhs._uuid.7 && - lhs._uuid.8 == rhs._uuid.8 && - lhs._uuid.9 == rhs._uuid.9 && - lhs._uuid.10 == rhs._uuid.10 && - lhs._uuid.11 == rhs._uuid.11 && - lhs._uuid.12 == rhs._uuid.12 && - lhs._uuid.13 == rhs._uuid.13 && - lhs._uuid.14 == rhs._uuid.14 && - lhs._uuid.15 == rhs._uuid.15 + lhs._uuid.0 == rhs._uuid.0 && lhs._uuid.1 == rhs._uuid.1 && lhs._uuid.2 == rhs._uuid.2 + && lhs._uuid.3 == rhs._uuid.3 && lhs._uuid.4 == rhs._uuid.4 && lhs._uuid.5 == rhs._uuid.5 + && lhs._uuid.6 == rhs._uuid.6 && lhs._uuid.7 == rhs._uuid.7 && lhs._uuid.8 == rhs._uuid.8 + && lhs._uuid.9 == rhs._uuid.9 && lhs._uuid.10 == rhs._uuid.10 && lhs._uuid.11 == rhs._uuid.11 + && lhs._uuid.12 == rhs._uuid.12 && lhs._uuid.13 == rhs._uuid.13 && lhs._uuid.14 == rhs._uuid.14 + && lhs._uuid.15 == rhs._uuid.15 } } @@ -160,7 +152,10 @@ extension LambdaRequestID: Decodable { let uuidString = try container.decode(String.self) guard let uuid = LambdaRequestID.fromString(uuidString) else { - throw DecodingError.dataCorruptedError(in: container, debugDescription: "Attempted to decode UUID from invalid UUID string.") + throw DecodingError.dataCorruptedError( + in: container, + debugDescription: "Attempted to decode UUID from invalid UUID string." + ) } self = uuid @@ -270,11 +265,11 @@ extension LambdaRequestID { static func fromPointer(_ ptr: UnsafeRawBufferPointer) -> LambdaRequestID? { func uint4Value(from value: UInt8, valid: inout Bool) -> UInt8 { switch value { - case UInt8(ascii: "0") ... UInt8(ascii: "9"): + case UInt8(ascii: "0")...UInt8(ascii: "9"): return value &- UInt8(ascii: "0") - case UInt8(ascii: "a") ... UInt8(ascii: "f"): + case UInt8(ascii: "a")...UInt8(ascii: "f"): return value &- UInt8(ascii: "a") &+ 10 - case UInt8(ascii: "A") ... UInt8(ascii: "F"): + case UInt8(ascii: "A")...UInt8(ascii: "F"): return value &- UInt8(ascii: "A") &+ 10 default: valid = false @@ -365,7 +360,7 @@ extension ByteBuffer { return nil } - let upperBound = indexFromReaderIndex &+ length // safe, can't overflow, we checked it above. + let upperBound = indexFromReaderIndex &+ length // safe, can't overflow, we checked it above. // uncheckedBounds is safe because `length` is >= 0, so the lower bound will always be lower/equal to upper return Range(uncheckedBounds: (lower: indexFromReaderIndex, upper: upperBound)) diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift b/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift index f2fcaa22..b7c1683a 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift @@ -80,8 +80,10 @@ final class LambdaRunner { ) // when log level is trace or lower, print the first Kb of the payload if logger.logLevel <= .trace, let buffer = bytes.getSlice(at: 0, length: max(bytes.readableBytes, 1024)) { - logger.trace("sending invocation to lambda handler", - metadata: ["1024 first bytes": .string(String(buffer: buffer))]) + logger.trace( + "sending invocation to lambda handler", + metadata: ["1024 first bytes": .string(String(buffer: buffer))] + ) } else { logger.debug("sending invocation to lambda handler") } @@ -99,7 +101,8 @@ final class LambdaRunner { } }.flatMap { invocation, result, context in // 3. report results to runtime engine - self.runtimeClient.reportResults(logger: logger, invocation: invocation, result: result).peekError { error in + self.runtimeClient.reportResults(logger: logger, invocation: invocation, result: result).peekError { + error in logger.error("could not report results to lambda runtime engine: \(error)") // To discuss: // Do we want to await the tasks in this case? @@ -130,15 +133,17 @@ final class LambdaRunner { extension LambdaContext { init(logger: Logger, eventLoop: EventLoop, allocator: ByteBufferAllocator, invocation: Invocation) { - self.init(requestID: invocation.requestID, - traceID: invocation.traceID, - invokedFunctionARN: invocation.invokedFunctionARN, - deadline: DispatchWallTime(millisSinceEpoch: invocation.deadlineInMillisSinceEpoch), - cognitoIdentity: invocation.cognitoIdentity, - clientContext: invocation.clientContext, - logger: logger, - eventLoop: eventLoop, - allocator: allocator) + self.init( + requestID: invocation.requestID, + traceID: invocation.traceID, + invokedFunctionARN: invocation.invokedFunctionARN, + deadline: DispatchWallTime(millisSinceEpoch: invocation.deadlineInMillisSinceEpoch), + cognitoIdentity: invocation.cognitoIdentity, + clientContext: invocation.clientContext, + logger: logger, + eventLoop: eventLoop, + allocator: allocator + ) } } diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift index 5349c5f8..7d9b6467 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift @@ -110,7 +110,11 @@ public final class LambdaRuntime { let terminator = LambdaTerminator() let runner = LambdaRunner(eventLoop: self.eventLoop, configuration: self.configuration) - let startupFuture = runner.initialize(handlerProvider: self.handlerProvider, logger: logger, terminator: terminator) + let startupFuture = runner.initialize( + handlerProvider: self.handlerProvider, + logger: logger, + terminator: terminator + ) startupFuture.flatMap { handler -> EventLoopFuture> in // after the startup future has succeeded, we have a handler that we can use // to `run` the lambda. @@ -164,8 +168,9 @@ public final class LambdaRuntime { if self.configuration.lifecycle.maxTimes > 0, count >= self.configuration.lifecycle.maxTimes { return promise.succeed(count) } - var logger = self.logger - logger[metadataKey: "lifecycleIteration"] = "\(count)" + var mlogger = self.logger + mlogger[metadataKey: "lifecycleIteration"] = "\(count)" + let logger = mlogger runner.run(handler: handler, logger: logger).whenComplete { result in switch result { case .success: @@ -301,7 +306,7 @@ public enum LambdaRuntimeFactory { /// Create a new `LambdaRuntime`. /// /// - parameters: - /// - handlerProvider: A provider of the ``Handler`` the `LambdaRuntime` will manage. + /// - handlerProvider: A provider of the ``LambdaRuntimeHandler`` the `LambdaRuntime` will manage. /// - eventLoop: An `EventLoop` to run the Lambda on. /// - logger: A `Logger` to log the Lambda events. @inlinable @@ -320,7 +325,7 @@ public enum LambdaRuntimeFactory { /// Create a new `LambdaRuntime`. /// /// - parameters: - /// - handlerProvider: A provider of the ``Handler`` the `LambdaRuntime` will manage. + /// - handlerProvider: A provider of the ``LambdaRuntimeHandler`` the `LambdaRuntime` will manage. /// - eventLoop: An `EventLoop` to run the Lambda on. /// - logger: A `Logger` to log the Lambda events. @inlinable diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift index 6fd0ac50..6836e42e 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift @@ -57,7 +57,11 @@ struct LambdaRuntimeClient { } /// Reports a result to the Runtime Engine. - func reportResults(logger: Logger, invocation: Invocation, result: Result) -> EventLoopFuture { + func reportResults( + logger: Logger, + invocation: Invocation, + result: Result + ) -> EventLoopFuture { var url = Consts.invocationURLPrefix + "/" + invocation.requestID var body: ByteBuffer? let headers: HTTPHeaders @@ -101,7 +105,8 @@ struct LambdaRuntimeClient { var body = self.allocator.buffer(capacity: bytes.count) body.writeBytes(bytes) logger.warning("reporting initialization error to lambda runtime engine using \(url)") - return self.httpClient.post(url: url, headers: LambdaRuntimeClient.errorHeaders, body: body).flatMapThrowing { response in + return self.httpClient.post(url: url, headers: LambdaRuntimeClient.errorHeaders, body: body).flatMapThrowing { + response in guard response.status == .accepted else { throw LambdaRuntimeError.badStatusCode(response.status) } diff --git a/Sources/AWSLambdaRuntimeCore/Terminator.swift b/Sources/AWSLambdaRuntimeCore/Terminator.swift index 650b2a1d..48f6b8e5 100644 --- a/Sources/AWSLambdaRuntimeCore/Terminator.swift +++ b/Sources/AWSLambdaRuntimeCore/Terminator.swift @@ -57,7 +57,11 @@ public final class LambdaTerminator { /// /// - Returns: An `EventLoopFuture` with the result of the termination cycle. func terminate(eventLoop: EventLoop) -> EventLoopFuture { - func terminate(_ iterator: IndexingIterator<[(name: String, handler: Handler)]>, errors: [Error], promise: EventLoopPromise) { + func terminate( + _ iterator: IndexingIterator<[(name: String, handler: Handler)]>, + errors: [Error], + promise: EventLoopPromise + ) { var iterator = iterator guard let handler = iterator.next()?.handler else { if errors.isEmpty { diff --git a/Sources/AWSLambdaRuntimeCore/Utils.swift b/Sources/AWSLambdaRuntimeCore/Utils.swift index 7d53c5eb..85e6018e 100644 --- a/Sources/AWSLambdaRuntimeCore/Utils.swift +++ b/Sources/AWSLambdaRuntimeCore/Utils.swift @@ -53,7 +53,7 @@ enum Signal: Int32 { case INT = 2 case QUIT = 3 case ABRT = 6 - case KILL = 9 + case KILL = 9 // ignore-unacceptable-language case ALRM = 14 case TERM = 15 } @@ -80,7 +80,7 @@ extension String { while nextIndex != stringBytes.endIndex { switch stringBytes[nextIndex] { - case 0 ..< 32, UInt8(ascii: "\""), UInt8(ascii: "\\"): + case 0..<32, UInt8(ascii: "\""), UInt8(ascii: "\\"): // All Unicode characters may be placed within the // quotation marks, except for the characters that MUST be escaped: // quotation mark, reverse solidus, and the control characters (U+0000 @@ -88,7 +88,7 @@ extension String { // https://tools.ietf.org/html/rfc7159#section-7 // copy the current range over - bytes.append(contentsOf: stringBytes[startCopyIndex ..< nextIndex]) + bytes.append(contentsOf: stringBytes[startCopyIndex.. - init(requestId: String = UUID().uuidString, event: String = "hello", result: Result = .success("hello")) { + init( + requestId: String = UUID().uuidString, + event: String = "hello", + result: Result = .success("hello") + ) { self.requestId = requestId self.event = event self.result = result diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaRequestIDTests.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaRequestIDTests.swift index 7849fe09..e58520ac 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/LambdaRequestIDTests.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/LambdaRequestIDTests.swift @@ -12,10 +12,11 @@ // //===----------------------------------------------------------------------===// -@testable import AWSLambdaRuntimeCore import NIOCore import XCTest +@testable import AWSLambdaRuntimeCore + final class LambdaRequestIDTest: XCTestCase { func testInitFromStringSuccess() { let string = "E621E1F8-C36C-495A-93FC-0C247A3E6E5F" @@ -190,7 +191,10 @@ final class LambdaRequestIDTest: XCTestCase { var data: Data? XCTAssertNoThrow(data = try JSONEncoder().encode(test)) - XCTAssertEqual(try String(decoding: XCTUnwrap(data), as: Unicode.UTF8.self), #"{"requestID":"\#(requestID.uuidString)"}"#) + XCTAssertEqual( + try String(decoding: XCTUnwrap(data), as: Unicode.UTF8.self), + #"{"requestID":"\#(requestID.uuidString)"}"# + ) } func testDecodingSuccess() { @@ -214,7 +218,7 @@ final class LambdaRequestIDTest: XCTestCase { _ = requestIDString.removeLast() let data = #"{"requestID":"\#(requestIDString)"}"#.data(using: .utf8) - XCTAssertThrowsError(_ = try JSONDecoder().decode(Test.self, from: XCTUnwrap(data))) { error in + XCTAssertThrowsError(try JSONDecoder().decode(Test.self, from: XCTUnwrap(data))) { error in XCTAssertNotNil(error as? DecodingError) } } diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaRunnerTest.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaRunnerTest.swift index 6fd91aec..a057a2b9 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/LambdaRunnerTest.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/LambdaRunnerTest.swift @@ -12,10 +12,11 @@ // //===----------------------------------------------------------------------===// -@testable import AWSLambdaRuntimeCore import NIOCore import XCTest +@testable import AWSLambdaRuntimeCore + class LambdaRunnerTest: XCTestCase { func testSuccess() { struct Behavior: LambdaServerBehavior { @@ -94,9 +95,14 @@ class LambdaRunnerTest: XCTestCase { return .failure(.internalServerError) } } - XCTAssertNoThrow(try runLambda(behavior: Behavior(), handlerProvider: { context in - context.eventLoop.makeSucceededFuture(EchoHandler()) - })) + XCTAssertNoThrow( + try runLambda( + behavior: Behavior(), + handlerProvider: { context in + context.eventLoop.makeSucceededFuture(EchoHandler()) + } + ) + ) } func testCustomProviderFailure() { @@ -125,9 +131,14 @@ class LambdaRunnerTest: XCTestCase { struct CustomError: Error {} - XCTAssertThrowsError(try runLambda(behavior: Behavior(), handlerProvider: { context -> EventLoopFuture in - context.eventLoop.makeFailedFuture(CustomError()) - })) { error in + XCTAssertThrowsError( + try runLambda( + behavior: Behavior(), + handlerProvider: { context -> EventLoopFuture in + context.eventLoop.makeFailedFuture(CustomError()) + } + ) + ) { error in XCTAssertNotNil(error as? CustomError, "expecting error to match") } } @@ -156,9 +167,14 @@ class LambdaRunnerTest: XCTestCase { return .failure(.internalServerError) } } - XCTAssertNoThrow(try runLambda(behavior: Behavior(), handlerProvider: { _ async throws -> EchoHandler in - EchoHandler() - })) + XCTAssertNoThrow( + try runLambda( + behavior: Behavior(), + handlerProvider: { _ async throws -> EchoHandler in + EchoHandler() + } + ) + ) } func testCustomAsyncProviderFailure() { @@ -187,9 +203,14 @@ class LambdaRunnerTest: XCTestCase { struct CustomError: Error {} - XCTAssertThrowsError(try runLambda(behavior: Behavior(), handlerProvider: { _ async throws -> EchoHandler in - throw CustomError() - })) { error in + XCTAssertThrowsError( + try runLambda( + behavior: Behavior(), + handlerProvider: { _ async throws -> EchoHandler in + throw CustomError() + } + ) + ) { error in XCTAssertNotNil(error as? CustomError, "expecting error to match") } } diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeClientTest.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeClientTest.swift index 83e18c2e..01d7cafb 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeClientTest.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeClientTest.swift @@ -12,7 +12,6 @@ // //===----------------------------------------------------------------------===// -@testable import AWSLambdaRuntimeCore import Logging import NIOCore import NIOFoundationCompat @@ -21,6 +20,8 @@ import NIOPosix import NIOTestUtils import XCTest +@testable import AWSLambdaRuntimeCore + class LambdaRuntimeClientTest: XCTestCase { func testSuccess() { let behavior = Behavior() @@ -204,7 +205,10 @@ class LambdaRuntimeClientTest: XCTestCase { errorMessage: #"underlyingError: "An error with a windows path C:\Windows\""# ) let windowsBytes = windowsError.toJSONBytes() - XCTAssertEqual(#"{"errorType":"error","errorMessage":"underlyingError: \"An error with a windows path C:\\Windows\\\""}"#, String(decoding: windowsBytes, as: Unicode.UTF8.self)) + XCTAssertEqual( + #"{"errorType":"error","errorMessage":"underlyingError: \"An error with a windows path C:\\Windows\\\""}"#, + String(decoding: windowsBytes, as: Unicode.UTF8.self) + ) // we want to check if unicode sequences work let emojiError = ErrorResponse( @@ -212,7 +216,10 @@ class LambdaRuntimeClientTest: XCTestCase { errorMessage: #"🥑👨‍👩‍👧‍👧👩‍👩‍👧‍👧👨‍👨‍👧"# ) let emojiBytes = emojiError.toJSONBytes() - XCTAssertEqual(#"{"errorType":"error","errorMessage":"🥑👨‍👩‍👧‍👧👩‍👩‍👧‍👧👨‍👨‍👧"}"#, String(decoding: emojiBytes, as: Unicode.UTF8.self)) + XCTAssertEqual( + #"{"errorType":"error","errorMessage":"🥑👨‍👩‍👧‍👧👩‍👩‍👧‍👧👨‍👨‍👧"}"#, + String(decoding: emojiBytes, as: Unicode.UTF8.self) + ) } func testInitializationErrorReport() { @@ -223,18 +230,27 @@ class LambdaRuntimeClientTest: XCTestCase { defer { XCTAssertNoThrow(try server.stop()) } let logger = Logger(label: "TestLogger") - let client = LambdaRuntimeClient(eventLoop: eventLoopGroup.next(), configuration: .init(address: "127.0.0.1:\(server.serverPort)")) + let client = LambdaRuntimeClient( + eventLoop: eventLoopGroup.next(), + configuration: .init(address: "127.0.0.1:\(server.serverPort)") + ) let result = client.reportInitializationError(logger: logger, error: TestError("boom")) var inboundHeader: HTTPServerRequestPart? XCTAssertNoThrow(inboundHeader = try server.readInbound()) - guard case .head(let head) = try? XCTUnwrap(inboundHeader) else { XCTFail("Expected to get a head first"); return } + guard case .head(let head) = try? XCTUnwrap(inboundHeader) else { + XCTFail("Expected to get a head first") + return + } XCTAssertEqual(head.headers["lambda-runtime-function-error-type"], ["Unhandled"]) XCTAssertEqual(head.headers["user-agent"], ["Swift-Lambda/Unknown"]) var inboundBody: HTTPServerRequestPart? XCTAssertNoThrow(inboundBody = try server.readInbound()) - guard case .body(let body) = try? XCTUnwrap(inboundBody) else { XCTFail("Expected body after head"); return } + guard case .body(let body) = try? XCTUnwrap(inboundBody) else { + XCTFail("Expected body after head") + return + } XCTAssertEqual(try JSONDecoder().decode(ErrorResponse.self, from: body).errorMessage, "boom") XCTAssertEqual(try server.readInbound(), .end(nil)) @@ -252,7 +268,10 @@ class LambdaRuntimeClientTest: XCTestCase { defer { XCTAssertNoThrow(try server.stop()) } let logger = Logger(label: "TestLogger") - let client = LambdaRuntimeClient(eventLoop: eventLoopGroup.next(), configuration: .init(address: "127.0.0.1:\(server.serverPort)")) + let client = LambdaRuntimeClient( + eventLoop: eventLoopGroup.next(), + configuration: .init(address: "127.0.0.1:\(server.serverPort)") + ) let header = HTTPHeaders([ (AmazonHeaders.requestID, "test"), @@ -264,17 +283,27 @@ class LambdaRuntimeClientTest: XCTestCase { XCTAssertNoThrow(inv = try Invocation(headers: header)) guard let invocation = inv else { return } - let result = client.reportResults(logger: logger, invocation: invocation, result: Result.failure(TestError("boom"))) + let result = client.reportResults( + logger: logger, + invocation: invocation, + result: Result.failure(TestError("boom")) + ) var inboundHeader: HTTPServerRequestPart? XCTAssertNoThrow(inboundHeader = try server.readInbound()) - guard case .head(let head) = try? XCTUnwrap(inboundHeader) else { XCTFail("Expected to get a head first"); return } + guard case .head(let head) = try? XCTUnwrap(inboundHeader) else { + XCTFail("Expected to get a head first") + return + } XCTAssertEqual(head.headers["lambda-runtime-function-error-type"], ["Unhandled"]) XCTAssertEqual(head.headers["user-agent"], ["Swift-Lambda/Unknown"]) var inboundBody: HTTPServerRequestPart? XCTAssertNoThrow(inboundBody = try server.readInbound()) - guard case .body(let body) = try? XCTUnwrap(inboundBody) else { XCTFail("Expected body after head"); return } + guard case .body(let body) = try? XCTUnwrap(inboundBody) else { + XCTFail("Expected body after head") + return + } XCTAssertEqual(try JSONDecoder().decode(ErrorResponse.self, from: body).errorMessage, "boom") XCTAssertEqual(try server.readInbound(), .end(nil)) @@ -292,7 +321,10 @@ class LambdaRuntimeClientTest: XCTestCase { defer { XCTAssertNoThrow(try server.stop()) } let logger = Logger(label: "TestLogger") - let client = LambdaRuntimeClient(eventLoop: eventLoopGroup.next(), configuration: .init(address: "127.0.0.1:\(server.serverPort)")) + let client = LambdaRuntimeClient( + eventLoop: eventLoopGroup.next(), + configuration: .init(address: "127.0.0.1:\(server.serverPort)") + ) let header = HTTPHeaders([ (AmazonHeaders.requestID, "test"), @@ -308,7 +340,10 @@ class LambdaRuntimeClientTest: XCTestCase { var inboundHeader: HTTPServerRequestPart? XCTAssertNoThrow(inboundHeader = try server.readInbound()) - guard case .head(let head) = try? XCTUnwrap(inboundHeader) else { XCTFail("Expected to get a head first"); return } + guard case .head(let head) = try? XCTUnwrap(inboundHeader) else { + XCTFail("Expected to get a head first") + return + } XCTAssertFalse(head.headers.contains(name: "lambda-runtime-function-error-type")) XCTAssertEqual(head.headers["user-agent"], ["Swift-Lambda/Unknown"]) diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeTest.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeTest.swift index 39764ccc..6f8ddf1c 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeTest.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeTest.swift @@ -12,13 +12,14 @@ // //===----------------------------------------------------------------------===// -@testable import AWSLambdaRuntimeCore import Logging import NIOCore import NIOHTTP1 import NIOPosix import XCTest +@testable import AWSLambdaRuntimeCore + class LambdaRuntimeTest: XCTestCase { func testShutdownFutureIsFulfilledWithStartUpError() { let server = MockLambdaServer(behavior: FailedBootstrapBehavior()) @@ -37,7 +38,7 @@ class LambdaRuntimeTest: XCTestCase { XCTAssert($0 is StartupError) } - XCTAssertThrowsError(_ = try runtime.shutdownFuture.wait()) { + XCTAssertThrowsError(try runtime.shutdownFuture.wait()) { XCTAssert($0 is StartupError) } } @@ -54,7 +55,7 @@ class LambdaRuntimeTest: XCTestCase { let runtime = LambdaRuntimeFactory.makeRuntime(EchoHandler.self, eventLoop: eventLoop, logger: logger) XCTAssertNoThrow(_ = try eventLoop.flatSubmit { runtime.start() }.wait()) - XCTAssertThrowsError(_ = try runtime.shutdownFuture.wait()) { + XCTAssertThrowsError(try runtime.shutdownFuture.wait()) { XCTAssertEqual(.badStatusCode(HTTPResponseStatus.internalServerError), $0 as? LambdaRuntimeError) } } @@ -73,21 +74,36 @@ class LambdaRuntimeTest: XCTestCase { struct ShutdownErrorHandler: EventLoopLambdaHandler { static func makeHandler(context: LambdaInitializationContext) -> EventLoopFuture { // register shutdown operation - context.terminator.register(name: "test 1", handler: { eventLoop in - eventLoop.makeFailedFuture(ShutdownError(description: "error 1")) - }) - context.terminator.register(name: "test 2", handler: { eventLoop in - eventLoop.makeSucceededVoidFuture() - }) - context.terminator.register(name: "test 3", handler: { eventLoop in - eventLoop.makeFailedFuture(ShutdownError(description: "error 2")) - }) - context.terminator.register(name: "test 4", handler: { eventLoop in - eventLoop.makeSucceededVoidFuture() - }) - context.terminator.register(name: "test 5", handler: { eventLoop in - eventLoop.makeFailedFuture(ShutdownError(description: "error 3")) - }) + context.terminator.register( + name: "test 1", + handler: { eventLoop in + eventLoop.makeFailedFuture(ShutdownError(description: "error 1")) + } + ) + context.terminator.register( + name: "test 2", + handler: { eventLoop in + eventLoop.makeSucceededVoidFuture() + } + ) + context.terminator.register( + name: "test 3", + handler: { eventLoop in + eventLoop.makeFailedFuture(ShutdownError(description: "error 2")) + } + ) + context.terminator.register( + name: "test 4", + handler: { eventLoop in + eventLoop.makeSucceededVoidFuture() + } + ) + context.terminator.register( + name: "test 5", + handler: { eventLoop in + eventLoop.makeFailedFuture(ShutdownError(description: "error 3")) + } + ) return context.eventLoop.makeSucceededFuture(ShutdownErrorHandler()) } @@ -103,14 +119,18 @@ class LambdaRuntimeTest: XCTestCase { XCTAssertNoThrow(try eventLoop.flatSubmit { runtime.start() }.wait()) XCTAssertThrowsError(try runtime.shutdownFuture.wait()) { error in guard case LambdaRuntimeError.shutdownError(let shutdownError, .failure(let runtimeError)) = error else { - XCTFail("Unexpected error: \(error)"); return + XCTFail("Unexpected error: \(error)") + return } - XCTAssertEqual(shutdownError as? LambdaTerminator.TerminationError, LambdaTerminator.TerminationError(underlying: [ - ShutdownError(description: "error 3"), - ShutdownError(description: "error 2"), - ShutdownError(description: "error 1"), - ])) + XCTAssertEqual( + shutdownError as? LambdaTerminator.TerminationError, + LambdaTerminator.TerminationError(underlying: [ + ShutdownError(description: "error 3"), + ShutdownError(description: "error 2"), + ShutdownError(description: "error 1"), + ]) + ) XCTAssertEqual(runtimeError as? LambdaRuntimeError, .badStatusCode(.internalServerError)) } } diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaTest.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaTest.swift index ffb50953..ea4ebc9d 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/LambdaTest.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/LambdaTest.swift @@ -12,19 +12,20 @@ // //===----------------------------------------------------------------------===// -@testable import AWSLambdaRuntimeCore import Logging import NIOCore import NIOPosix import XCTest +@testable import AWSLambdaRuntimeCore + class LambdaTest: XCTestCase { func testSuccess() { let server = MockLambdaServer(behavior: Behavior()) XCTAssertNoThrow(try server.start().wait()) defer { XCTAssertNoThrow(try server.stop().wait()) } - let maxTimes = Int.random(in: 10 ... 20) + let maxTimes = Int.random(in: 10...20) let configuration = LambdaConfiguration(lifecycle: .init(maxTimes: maxTimes)) let result = Lambda.run(configuration: configuration, handlerType: EchoHandler.self) assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) @@ -35,7 +36,7 @@ class LambdaTest: XCTestCase { XCTAssertNoThrow(try server.start().wait()) defer { XCTAssertNoThrow(try server.stop().wait()) } - let maxTimes = Int.random(in: 10 ... 20) + let maxTimes = Int.random(in: 10...20) let configuration = LambdaConfiguration(lifecycle: .init(maxTimes: maxTimes)) let result = Lambda.run(configuration: configuration, handlerType: RuntimeErrorHandler.self) assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) @@ -93,7 +94,7 @@ class LambdaTest: XCTestCase { // we need to schedule the signal before we start the long running `Lambda.run`, since // `Lambda.run` will block the main thread. usleep(100_000) - kill(getpid(), signal.rawValue) + kill(getpid(), signal.rawValue) // ignore-unacceptable-language } let result = Lambda.run(configuration: configuration, handlerType: EchoHandler.self) @@ -112,8 +113,10 @@ class LambdaTest: XCTestCase { XCTAssertNoThrow(try server.start().wait()) defer { XCTAssertNoThrow(try server.stop().wait()) } - let configuration = LambdaConfiguration(lifecycle: .init(maxTimes: 1), - runtimeEngine: .init(requestTimeout: .milliseconds(timeout))) + let configuration = LambdaConfiguration( + lifecycle: .init(maxTimes: 1), + runtimeEngine: .init(requestTimeout: .milliseconds(timeout)) + ) let result = Lambda.run(configuration: configuration, handlerType: EchoHandler.self) assertLambdaRuntimeResult(result, shouldFailWithError: LambdaRuntimeError.upstreamError("timeout")) } @@ -125,7 +128,10 @@ class LambdaTest: XCTestCase { let configuration = LambdaConfiguration(lifecycle: .init(maxTimes: 1)) let result = Lambda.run(configuration: configuration, handlerType: EchoHandler.self) - assertLambdaRuntimeResult(result, shouldFailWithError: LambdaRuntimeError.upstreamError("connectionResetByPeer")) + assertLambdaRuntimeResult( + result, + shouldFailWithError: LambdaRuntimeError.upstreamError("connectionResetByPeer") + ) } func testBigEvent() { @@ -190,7 +196,7 @@ class LambdaTest: XCTestCase { } func testDeadline() { - let delta = Int.random(in: 1 ... 600) + let delta = Int.random(in: 1...600) let milli1 = Date(timeIntervalSinceNow: Double(delta)).millisSinceEpoch let milli2 = (DispatchWallTime.now() + .seconds(delta)).millisSinceEpoch @@ -286,7 +292,11 @@ class LambdaTest: XCTestCase { logger: logger ).get() - try await runner.initialize(handlerType: CodableEventLoopLambdaHandler.self, logger: logger, terminator: LambdaTerminator()).flatMap { handler2 in + try await runner.initialize( + handlerType: CodableEventLoopLambdaHandler.self, + logger: logger, + terminator: LambdaTerminator() + ).flatMap { handler2 in runner.run(handler: handler2, logger: logger) }.get() } @@ -301,7 +311,11 @@ private struct Behavior: LambdaServerBehavior { let event: String let result: Result - init(requestId: String = UUID().uuidString, event: String = "hello", result: Result = .success("hello")) { + init( + requestId: String = UUID().uuidString, + event: String = "hello", + result: Result = .success("hello") + ) { self.requestId = requestId self.event = event self.result = result diff --git a/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift b/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift index 47be5444..63ed9d9c 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift @@ -12,13 +12,14 @@ // //===----------------------------------------------------------------------===// -@testable import AWSLambdaRuntimeCore -import Foundation // for JSON +import Foundation // for JSON import Logging import NIOCore import NIOHTTP1 import NIOPosix +@testable import AWSLambdaRuntimeCore + final class MockLambdaServer { private let logger = Logger(label: "MockLambdaServer") private let behavior: LambdaServerBehavior @@ -47,7 +48,9 @@ final class MockLambdaServer { .serverChannelOption(ChannelOptions.socket(SocketOptionLevel(SOL_SOCKET), SO_REUSEADDR), value: 1) .childChannelInitializer { channel in channel.pipeline.configureHTTPServerPipeline(withErrorHandling: true).flatMap { _ in - channel.pipeline.addHandler(HTTPHandler(logger: self.logger, keepAlive: self.keepAlive, behavior: self.behavior)) + channel.pipeline.addHandler( + HTTPHandler(logger: self.logger, keepAlive: self.keepAlive, behavior: self.behavior) + ) } } return bootstrap.bind(host: self.host, port: self.port).flatMap { channel in @@ -163,8 +166,8 @@ final class HTTPHandler: ChannelInboundHandler { } } else if request.head.uri.hasSuffix(Consts.postErrorURLSuffix) { guard let requestId = request.head.uri.split(separator: "/").dropFirst(3).first, - let json = requestBody, - let error = ErrorResponse.fromJson(json) + let json = requestBody, + let error = ErrorResponse.fromJson(json) else { return self.writeResponse(context: context, status: .badRequest) } @@ -180,7 +183,12 @@ final class HTTPHandler: ChannelInboundHandler { self.writeResponse(context: context, status: responseStatus, headers: responseHeaders, body: responseBody) } - func writeResponse(context: ChannelHandlerContext, status: HTTPResponseStatus, headers: [(String, String)]? = nil, body: String? = nil) { + func writeResponse( + context: ChannelHandlerContext, + status: HTTPResponseStatus, + headers: [(String, String)]? = nil, + body: String? = nil + ) { var headers = HTTPHeaders(headers ?? []) headers.add(name: "Content-Length", value: "\(body?.utf8.count ?? 0)") if !self.keepAlive { diff --git a/Tests/AWSLambdaRuntimeCoreTests/Utils.swift b/Tests/AWSLambdaRuntimeCoreTests/Utils.swift index 97317326..14e15b6c 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/Utils.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/Utils.swift @@ -12,12 +12,13 @@ // //===----------------------------------------------------------------------===// -@testable import AWSLambdaRuntimeCore import Logging import NIOCore import NIOPosix import XCTest +@testable import AWSLambdaRuntimeCore + func runLambda(behavior: LambdaServerBehavior, handlerType: Handler.Type) throws { try runLambda(behavior: behavior, handlerProvider: CodableSimpleLambdaHandler.makeHandler(context:)) } @@ -34,21 +35,27 @@ func runLambda( behavior: LambdaServerBehavior, handlerProvider: @escaping (LambdaInitializationContext) -> EventLoopFuture ) throws { - try runLambda(behavior: behavior, handlerProvider: { context in - handlerProvider(context).map { - CodableEventLoopLambdaHandler(handler: $0, allocator: context.allocator) + try runLambda( + behavior: behavior, + handlerProvider: { context in + handlerProvider(context).map { + CodableEventLoopLambdaHandler(handler: $0, allocator: context.allocator) + } } - }) + ) } func runLambda( behavior: LambdaServerBehavior, handlerProvider: @escaping (LambdaInitializationContext) async throws -> Handler ) throws { - try runLambda(behavior: behavior, handlerProvider: { context in - let handler = try await handlerProvider(context) - return CodableEventLoopLambdaHandler(handler: handler, allocator: context.allocator) - }) + try runLambda( + behavior: behavior, + handlerProvider: { context in + let handler = try await handlerProvider(context) + return CodableEventLoopLambdaHandler(handler: handler, allocator: context.allocator) + } + ) } func runLambda( @@ -85,7 +92,13 @@ func runLambda( }.wait() } -func assertLambdaRuntimeResult(_ result: Result, shouldHaveRun: Int = 0, shouldFailWithError: Error? = nil, file: StaticString = #file, line: UInt = #line) { +func assertLambdaRuntimeResult( + _ result: Result, + shouldHaveRun: Int = 0, + shouldFailWithError: Error? = nil, + file: StaticString = #file, + line: UInt = #line +) { switch result { case .success where shouldFailWithError != nil: XCTFail("should fail with \(shouldFailWithError!)", file: file, line: line) @@ -94,7 +107,13 @@ func assertLambdaRuntimeResult(_ result: Result, shouldHaveRun: Int case .failure(let error) where shouldFailWithError == nil: XCTFail("should succeed, but failed with \(error)", file: file, line: line) case .failure(let error) where shouldFailWithError != nil: - XCTAssertEqual(String(describing: shouldFailWithError!), String(describing: error), "expected error to mactch", file: file, line: line) + XCTAssertEqual( + String(describing: shouldFailWithError!), + String(describing: error), + "expected error to mactch", + file: file, + line: line + ) default: XCTFail("invalid state") } diff --git a/Tests/AWSLambdaRuntimeCoreTests/UtilsTest.swift b/Tests/AWSLambdaRuntimeCoreTests/UtilsTest.swift index c5fc4ab5..bdc0b0e5 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/UtilsTest.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/UtilsTest.swift @@ -12,16 +12,17 @@ // //===----------------------------------------------------------------------===// -@testable import AWSLambdaRuntimeCore import XCTest +@testable import AWSLambdaRuntimeCore + class UtilsTest: XCTestCase { func testGenerateXRayTraceID() { // the time and identifier should be in hexadecimal digits let invalidCharacters = CharacterSet(charactersIn: "abcdef0123456789").inverted let numTests = 1000 var values = Set() - for _ in 0 ..< numTests { + for _ in 0..&2 "Usage: $0 REPO-GITHUB-URL NEW-VERSION OLD-VERSIONS..." - echo >&2 - echo >&2 "This script requires a Swift 5.6+ toolchain." - echo >&2 - echo >&2 "Examples:" - echo >&2 - echo >&2 "Check between main and tag 2.1.1 of swift-nio:" - echo >&2 " $0 https://github.com/apple/swift-nio main 2.1.1" - echo >&2 - echo >&2 "Check between HEAD and commit 64cf63d7 using the provided toolchain:" - echo >&2 " xcrun --toolchain org.swift.5120190702a $0 ../some-local-repo HEAD 64cf63d7" -} - -if [[ $# -lt 3 ]]; then - usage - exit 1 -fi - -tmpdir=$(mktemp -d /tmp/.check-api_XXXXXX) -repo_url=$1 -new_tag=$2 -shift 2 - -repodir="$tmpdir/repo" -git clone "$repo_url" "$repodir" -git -C "$repodir" fetch -q origin '+refs/pull/*:refs/remotes/origin/pr/*' -cd "$repodir" -git checkout -q "$new_tag" - -for old_tag in "$@"; do - echo "Checking public API breakages from $old_tag to $new_tag" - - swift package diagnose-api-breaking-changes "$old_tag" -done - -echo done diff --git a/scripts/generate_contributors_list.sh b/scripts/generate_contributors_list.sh deleted file mode 100755 index d745e21e..00000000 --- a/scripts/generate_contributors_list.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash -##===----------------------------------------------------------------------===## -## -## This source file is part of the SwiftAWSLambdaRuntime open source project -## -## Copyright (c) 2017-2018 Apple Inc. and the SwiftAWSLambdaRuntime project authors -## Licensed under Apache License v2.0 -## -## See LICENSE.txt for license information -## See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -## -## SPDX-License-Identifier: Apache-2.0 -## -##===----------------------------------------------------------------------===## - -set -eu -here="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -contributors=$( cd "$here"/.. && git shortlog -es | cut -f2 | sed 's/^/- /' ) - -cat > "$here/../CONTRIBUTORS.txt" <<- EOF - For the purpose of tracking copyright, this is the list of individuals and - organizations who have contributed source code to SwiftAWSLambdaRuntime. - - For employees of an organization/company where the copyright of work done - by employees of that company is held by the company itself, only the company - needs to be listed here. - - ## COPYRIGHT HOLDERS - - - Apple Inc. (all contributors with '@apple.com') - - ### Contributors - - $contributors - - **Updating this list** - - Please do not edit this file manually. It is generated using \`./scripts/generate_contributors_list.sh\`. If a name is misspelled or appearing multiple times: add an entry in \`./.mailmap\` -EOF diff --git a/scripts/performance_test.sh b/scripts/performance_test.sh index d46f2bef..65c2c244 100755 --- a/scripts/performance_test.sh +++ b/scripts/performance_test.sh @@ -31,7 +31,7 @@ swift build --package-path Examples/Echo -c release -Xswiftc -g swift build --package-path Examples/JSON -c release -Xswiftc -g cleanup() { - kill -9 $server_pid + kill -9 $server_pid # ignore-unacceptable-language } trap "cleanup" ERR @@ -47,12 +47,12 @@ results=() export MODE=string # start (fork) mock server -pkill -9 MockServer && echo "killed previous servers" && sleep 1 +pkill -9 MockServer && echo "killed previous servers" && sleep 1 # ignore-unacceptable-language echo "starting server in $MODE mode" (./.build/release/MockServer) & server_pid=$! sleep 1 -kill -0 $server_pid # check server is alive +kill -0 $server_pid # check server is alive # ignore-unacceptable-language # cold start echo "running $MODE mode cold test" @@ -85,12 +85,12 @@ results+=( "$MODE, warm: $avg_warm (ns)" ) export MODE=json # start (fork) mock server -pkill -9 MockServer && echo "killed previous servers" && sleep 1 +pkill -9 MockServer && echo "killed previous servers" && sleep 1 # ignore-unacceptable-language echo "starting server in $MODE mode" (./.build/release/MockServer) & server_pid=$! sleep 1 -kill -0 $server_pid # check server is alive +kill -0 $server_pid # check server is alive # ignore-unacceptable-language # cold start echo "running $MODE mode cold test" diff --git a/scripts/preview_docc.sh b/scripts/preview_docc.sh deleted file mode 100755 index d3b79690..00000000 --- a/scripts/preview_docc.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash -##===----------------------------------------------------------------------===## -## -## This source file is part of the SwiftAWSLambdaRuntime open source project -## -## Copyright (c) 2022 Apple Inc. and the SwiftAWSLambdaRuntime project authors -## Licensed under Apache License v2.0 -## -## See LICENSE.txt for license information -## See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -## -## SPDX-License-Identifier: Apache-2.0 -## -##===----------------------------------------------------------------------===## - -##===----------------------------------------------------------------------===## -## -## This source file is part of the Swift Distributed Actors open source project -## -## Copyright (c) 2018-2019 Apple Inc. and the Swift Distributed Actors project authors -## Licensed under Apache License v2.0 -## -## See LICENSE.txt for license information -## See CONTRIBUTORS.md for the list of Swift Distributed Actors project authors -## -## SPDX-License-Identifier: Apache-2.0 -## -##===----------------------------------------------------------------------===## - -swift package --disable-sandbox preview-documentation --target $1 diff --git a/scripts/soundness.sh b/scripts/soundness.sh deleted file mode 100755 index 651a5451..00000000 --- a/scripts/soundness.sh +++ /dev/null @@ -1,146 +0,0 @@ -#!/bin/bash -##===----------------------------------------------------------------------===## -## -## This source file is part of the SwiftAWSLambdaRuntime open source project -## -## Copyright (c) 2017-2022 Apple Inc. and the SwiftAWSLambdaRuntime project authors -## Licensed under Apache License v2.0 -## -## See LICENSE.txt for license information -## See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -## -## SPDX-License-Identifier: Apache-2.0 -## -##===----------------------------------------------------------------------===## - -set -eu - -here="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -function replace_acceptable_years() { - # this needs to replace all acceptable forms with 'YEARS' - sed -e 's/20[12][78901]-20[12][89012345]/YEARS/' -e 's/201[789]/YEARS/' -e 's/202[012345]/YEARS/' -} - -printf "=> Checking for unacceptable language... " -# This greps for unacceptable terminology. The square bracket[s] are so that -# "git grep" doesn't find the lines that greps :). -unacceptable_terms=( - -e blacklis[t] - -e whitelis[t] - -e slav[e] - -e sanit[y] -) -if git grep --color=never -i "${unacceptable_terms[@]}" -- . ":(exclude)CODE_OF_CONDUCT.md" > /dev/null; then - printf "\033[0;31mUnacceptable language found.\033[0m\n" - git grep -i "${unacceptable_terms[@]}" - exit 1 -fi -printf "\033[0;32mokay.\033[0m\n" - -printf "=> Checking format... " -FIRST_OUT="$(git status --porcelain)" -swiftformat . > /dev/null 2>&1 -SECOND_OUT="$(git status --porcelain)" -if [[ "$FIRST_OUT" != "$SECOND_OUT" ]]; then - printf "\033[0;31mformatting issues!\033[0m\n" - git --no-pager diff - exit 1 -else - printf "\033[0;32mokay.\033[0m\n" -fi - -printf "=> Checking license headers\n" -tmp=$(mktemp /tmp/.swift-aws-lambda-soundness_XXXXXX) - -for language in swift-or-c bash dtrace; do - printf " * $language... " - declare -a matching_files - declare -a exceptions - expections=( ) - matching_files=( -name '*' ) - case "$language" in - swift-or-c) - exceptions=( -name Package.swift -o -name 'Package@*.swift' ) - matching_files=( -name '*.swift' -o -name '*.c' -o -name '*.h' ) - cat > "$tmp" <<"EOF" -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) YEARS Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// -EOF - ;; - bash) - matching_files=( -name '*.sh' ) - cat > "$tmp" <<"EOF" -#!/bin/bash -##===----------------------------------------------------------------------===## -## -## This source file is part of the SwiftAWSLambdaRuntime open source project -## -## Copyright (c) YEARS Apple Inc. and the SwiftAWSLambdaRuntime project authors -## Licensed under Apache License v2.0 -## -## See LICENSE.txt for license information -## See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -## -## SPDX-License-Identifier: Apache-2.0 -## -##===----------------------------------------------------------------------===## -EOF - ;; - dtrace) - matching_files=( -name '*.d' ) - cat > "$tmp" <<"EOF" -#!/usr/sbin/dtrace -q -s -/*===----------------------------------------------------------------------===* - * - * This source file is part of the SwiftAWSLambdaRuntime open source project - * - * Copyright (c) YEARS Apple Inc. and the SwiftAWSLambdaRuntime project authors - * Licensed under Apache License v2.0 - * - * See LICENSE.txt for license information - * See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors - * - * SPDX-License-Identifier: Apache-2.0 - * - *===----------------------------------------------------------------------===*/ -EOF - ;; - *) - echo >&2 "ERROR: unknown language '$language'" - ;; - esac - - expected_lines=$(cat "$tmp" | wc -l) - expected_sha=$(cat "$tmp" | shasum) - - ( - cd "$here/.." - find . \ - \( \! -path '*/.build/*' -a \ - \( \! -path '*/.git/*' \) -a \ - \( \! -path '*/Documentation.docc/*' \) -a \ - \( "${matching_files[@]}" \) -a \ - \( \! \( "${exceptions[@]}" \) \) \) | while read line; do - if [[ "$(cat "$line" | replace_acceptable_years | head -n $expected_lines | shasum)" != "$expected_sha" ]]; then - printf "\033[0;31mmissing headers in file '$line'!\033[0m\n" - diff -u <(cat "$line" | replace_acceptable_years | head -n $expected_lines) "$tmp" - exit 1 - fi - done - printf "\033[0;32mokay.\033[0m\n" - ) -done - -rm "$tmp" From f32987422cdebf9234f571aa3ab68d32a1edfacc Mon Sep 17 00:00:00 2001 From: aryan-25 Date: Wed, 28 Aug 2024 10:10:15 +0100 Subject: [PATCH 017/177] Require Swift 6 (#341) * Require Swift 6 * Apply formatter * Disable 5.8, 5.9, and 5.10 checks * Remove -warnings-as-errors for now * Ensure plugin compiles in Swift 6 language mode --- .github/workflows/pull_request.yml | 10 +-- Package.swift | 42 +++++++----- Package@swift-5.8.swift | 92 -------------------------- Plugins/AWSLambdaPackager/Plugin.swift | 40 ++++++----- 4 files changed, 56 insertions(+), 128 deletions(-) delete mode 100644 Package@swift-5.8.swift diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index f0657f0d..814e6ed5 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -16,11 +16,11 @@ jobs: name: Unit tests uses: apple/swift-nio/.github/workflows/unit_tests.yml@main with: - linux_5_8_arguments_override: "-Xswiftc -warnings-as-errors --explicit-target-dependency-import-check error" - linux_5_9_arguments_override: "-Xswiftc -warnings-as-errors --explicit-target-dependency-import-check error" - linux_5_10_arguments_override: "-Xswiftc -warnings-as-errors --explicit-target-dependency-import-check error" - linux_nightly_6_0_arguments_override: "-Xswiftc -warnings-as-errors --explicit-target-dependency-import-check error" - linux_nightly_main_arguments_override: "-Xswiftc -warnings-as-errors --explicit-target-dependency-import-check error" + linux_5_8_enabled: false + linux_5_9_enabled: false + linux_5_10_enabled: false + linux_nightly_6_0_arguments_override: "--explicit-target-dependency-import-check error" + linux_nightly_main_arguments_override: "--explicit-target-dependency-import-check error" swift-6-language-mode: name: Swift 6 Language Mode diff --git a/Package.swift b/Package.swift index cb9c5321..38a18f83 100644 --- a/Package.swift +++ b/Package.swift @@ -1,21 +1,23 @@ -// swift-tools-version:5.9 +// swift-tools-version:6.0 import PackageDescription +#if os(macOS) +let platforms: [PackageDescription.SupportedPlatform]? = [.macOS(.v15)] +#else +let platforms: [PackageDescription.SupportedPlatform]? = nil +#endif + let package = Package( name: "swift-aws-lambda-runtime", - platforms: [ - .macOS(.v12), - .iOS(.v15), - .tvOS(.v15), - .watchOS(.v8), - ], + platforms: platforms, products: [ // this library exports `AWSLambdaRuntimeCore` and adds Foundation convenience methods .library(name: "AWSLambdaRuntime", targets: ["AWSLambdaRuntime"]), // this has all the main functionality for lambda and it does not link Foundation .library(name: "AWSLambdaRuntimeCore", targets: ["AWSLambdaRuntimeCore"]), // plugin to package the lambda, creating an archive that can be uploaded to AWS + // requires Linux or at least macOS v15 .plugin(name: "AWSLambdaPackager", targets: ["AWSLambdaPackager"]), // for testing only .library(name: "AWSLambdaTesting", targets: ["AWSLambdaTesting"]), @@ -23,7 +25,7 @@ let package = Package( dependencies: [ .package(url: "https://github.com/apple/swift-nio.git", .upToNextMajor(from: "2.67.0")), .package(url: "https://github.com/apple/swift-log.git", .upToNextMajor(from: "1.5.4")), - .package(url: "https://github.com/apple/swift-docc-plugin", exact: "1.3.0"), + .package(url: "https://github.com/apple/swift-docc-plugin.git", from: "1.0.0"), ], targets: [ .target( @@ -32,7 +34,8 @@ let package = Package( .byName(name: "AWSLambdaRuntimeCore"), .product(name: "NIOCore", package: "swift-nio"), .product(name: "NIOFoundationCompat", package: "swift-nio"), - ] + ], + swiftSettings: [.swiftLanguageMode(.v5)] ), .target( name: "AWSLambdaRuntimeCore", @@ -42,7 +45,8 @@ let package = Package( .product(name: "NIOCore", package: "swift-nio"), .product(name: "NIOConcurrencyHelpers", package: "swift-nio"), .product(name: "NIOPosix", package: "swift-nio"), - ] + ], + swiftSettings: [.swiftLanguageMode(.v5)] ), .plugin( name: "AWSLambdaPackager", @@ -60,14 +64,16 @@ let package = Package( .byName(name: "AWSLambdaRuntimeCore"), .product(name: "NIOTestUtils", package: "swift-nio"), .product(name: "NIOFoundationCompat", package: "swift-nio"), - ] + ], + swiftSettings: [.swiftLanguageMode(.v5)] ), .testTarget( name: "AWSLambdaRuntimeTests", dependencies: [ .byName(name: "AWSLambdaRuntimeCore"), .byName(name: "AWSLambdaRuntime"), - ] + ], + swiftSettings: [.swiftLanguageMode(.v5)] ), // testing helper .target( @@ -75,16 +81,22 @@ let package = Package( dependencies: [ .byName(name: "AWSLambdaRuntime"), .product(name: "NIO", package: "swift-nio"), - ] + ], + swiftSettings: [.swiftLanguageMode(.v5)] + ), + .testTarget( + name: "AWSLambdaTestingTests", + dependencies: ["AWSLambdaTesting"], + swiftSettings: [.swiftLanguageMode(.v5)] ), - .testTarget(name: "AWSLambdaTestingTests", dependencies: ["AWSLambdaTesting"]), // for perf testing .executableTarget( name: "MockServer", dependencies: [ .product(name: "NIOHTTP1", package: "swift-nio"), .product(name: "NIO", package: "swift-nio"), - ] + ], + swiftSettings: [.swiftLanguageMode(.v5)] ), ] ) diff --git a/Package@swift-5.8.swift b/Package@swift-5.8.swift deleted file mode 100644 index 7add120b..00000000 --- a/Package@swift-5.8.swift +++ /dev/null @@ -1,92 +0,0 @@ -// swift-tools-version:5.7 - -import PackageDescription - -let package = Package( - name: "swift-aws-lambda-runtime", - platforms: [ - .macOS(.v12), - .iOS(.v15), - .tvOS(.v15), - .watchOS(.v8), - ], - products: [ - // this library exports `AWSLambdaRuntimeCore` and adds Foundation convenience methods - .library(name: "AWSLambdaRuntime", targets: ["AWSLambdaRuntime"]), - // this has all the main functionality for lambda and it does not link Foundation - .library(name: "AWSLambdaRuntimeCore", targets: ["AWSLambdaRuntimeCore"]), - // plugin to package the lambda, creating an archive that can be uploaded to AWS - .plugin(name: "AWSLambdaPackager", targets: ["AWSLambdaPackager"]), - // for testing only - .library(name: "AWSLambdaTesting", targets: ["AWSLambdaTesting"]), - ], - dependencies: [ - .package(url: "https://github.com/apple/swift-nio.git", .upToNextMajor(from: "2.43.1")), - .package(url: "https://github.com/apple/swift-log.git", .upToNextMajor(from: "1.4.2")), - .package(url: "https://github.com/swift-server/swift-backtrace.git", .upToNextMajor(from: "1.2.3")), - .package(url: "https://github.com/apple/swift-docc-plugin", exact: "1.3.0"), - ], - targets: [ - .target( - name: "AWSLambdaRuntime", - dependencies: [ - .byName(name: "AWSLambdaRuntimeCore"), - .product(name: "NIOCore", package: "swift-nio"), - .product(name: "NIOFoundationCompat", package: "swift-nio"), - ] - ), - .target( - name: "AWSLambdaRuntimeCore", - dependencies: [ - .product(name: "Logging", package: "swift-log"), - .product(name: "Backtrace", package: "swift-backtrace"), - .product(name: "NIOHTTP1", package: "swift-nio"), - .product(name: "NIOCore", package: "swift-nio"), - .product(name: "NIOConcurrencyHelpers", package: "swift-nio"), - .product(name: "NIOPosix", package: "swift-nio"), - ] - ), - .plugin( - name: "AWSLambdaPackager", - capability: .command( - intent: .custom( - verb: "archive", - description: - "Archive the Lambda binary and prepare it for uploading to AWS. Requires docker on macOS or non Amazonlinux 2 distributions." - ) - ) - ), - .testTarget( - name: "AWSLambdaRuntimeCoreTests", - dependencies: [ - .byName(name: "AWSLambdaRuntimeCore"), - .product(name: "NIOTestUtils", package: "swift-nio"), - .product(name: "NIOFoundationCompat", package: "swift-nio"), - ] - ), - .testTarget( - name: "AWSLambdaRuntimeTests", - dependencies: [ - .byName(name: "AWSLambdaRuntimeCore"), - .byName(name: "AWSLambdaRuntime"), - ] - ), - // testing helper - .target( - name: "AWSLambdaTesting", - dependencies: [ - .byName(name: "AWSLambdaRuntime"), - .product(name: "NIO", package: "swift-nio"), - ] - ), - .testTarget(name: "AWSLambdaTestingTests", dependencies: ["AWSLambdaTesting"]), - // for perf testing - .executableTarget( - name: "MockServer", - dependencies: [ - .product(name: "NIOHTTP1", package: "swift-nio"), - .product(name: "NIO", package: "swift-nio"), - ] - ), - ] -) diff --git a/Plugins/AWSLambdaPackager/Plugin.swift b/Plugins/AWSLambdaPackager/Plugin.swift index 9ae2ad04..a0ea999b 100644 --- a/Plugins/AWSLambdaPackager/Plugin.swift +++ b/Plugins/AWSLambdaPackager/Plugin.swift @@ -15,19 +15,9 @@ import Dispatch import Foundation import PackagePlugin +import Synchronization -#if os(macOS) -import Darwin -#elseif canImport(Glibc) -import Glibc -#elseif canImport(Musl) -import Musl -#elseif os(Windows) -import ucrt -#else -#error("Unsupported platform") -#endif - +@available(macOS 15.0, *) @main struct AWSLambdaPackager: CommandPlugin { func performCommand(context: PackagePlugin.PluginContext, arguments: [String]) async throws { @@ -282,10 +272,23 @@ struct AWSLambdaPackager: CommandPlugin { print("\(executable.string) \(arguments.joined(separator: " "))") } - var output = "" + let fd = dup(1) + let stdout = fdopen(fd, "rw")! + defer { fclose(stdout) } + + // We need to use an unsafe transfer here to get the fd into our Sendable closure. + // This transfer is fine, because we guarantee that the code in the outputHandler + // is run before we continue the functions execution, where the fd is used again. + // See `process.waitUntilExit()` and the following `outputSync.wait()` + struct UnsafeTransfer: @unchecked Sendable { + let value: Value + } + + let outputMutex = Mutex("") let outputSync = DispatchGroup() let outputQueue = DispatchQueue(label: "AWSLambdaPackager.output") - let outputHandler = { (data: Data?) in + let unsafeTransfer = UnsafeTransfer(value: stdout) + let outputHandler = { @Sendable (data: Data?) in dispatchPrecondition(condition: .onQueue(outputQueue)) outputSync.enter() @@ -299,7 +302,9 @@ struct AWSLambdaPackager: CommandPlugin { return } - output += _output + "\n" + outputMutex.withLock { output in + output += _output + "\n" + } switch logLevel { case .silent: @@ -307,7 +312,7 @@ struct AWSLambdaPackager: CommandPlugin { case .debug(let outputIndent), .output(let outputIndent): print(String(repeating: " ", count: outputIndent), terminator: "") print(_output) - fflush(stdout) + fflush(unsafeTransfer.value) } } @@ -336,6 +341,8 @@ struct AWSLambdaPackager: CommandPlugin { // wait for output to be full processed outputSync.wait() + let output = outputMutex.withLock { $0 } + if process.terminationStatus != 0 { // print output on failure and if not already printed if logLevel < .output { @@ -359,6 +366,7 @@ struct AWSLambdaPackager: CommandPlugin { } } +@available(macOS 15.0, *) private struct Configuration: CustomStringConvertible { public let outputDirectory: Path public let products: [Product] From 0f68ed5c0c48189e7655a962ecbb260d6ad3b641 Mon Sep 17 00:00:00 2001 From: aryan-25 Date: Wed, 28 Aug 2024 13:53:02 +0100 Subject: [PATCH 018/177] Introduce LambdaRuntimeClientProtocol (#344) --- .../ControlPlaneRequest.swift | 18 ++++----- .../AWSLambdaRuntimeCore/LambdaRunner.swift | 2 +- .../LambdaRuntimeClient.swift | 6 +-- .../LambdaRuntimeClientProtocol.swift | 38 +++++++++++++++++++ .../ControlPlaneRequestTests.swift | 4 +- .../LambdaRuntimeClientTest.swift | 8 ++-- 6 files changed, 57 insertions(+), 19 deletions(-) create mode 100644 Sources/AWSLambdaRuntimeCore/LambdaRuntimeClientProtocol.swift diff --git a/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift b/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift index 6c29344c..da3d41d2 100644 --- a/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift +++ b/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift @@ -23,20 +23,20 @@ enum ControlPlaneRequest: Hashable { } enum ControlPlaneResponse: Hashable { - case next(Invocation, ByteBuffer) + case next(InvocationMetadata, ByteBuffer) case accepted case error(ErrorResponse) } -struct Invocation: Hashable { - let requestID: String - let deadlineInMillisSinceEpoch: Int64 - let invokedFunctionARN: String - let traceID: String - let clientContext: String? - let cognitoIdentity: String? +package struct InvocationMetadata: Hashable { + package let requestID: String + package let deadlineInMillisSinceEpoch: Int64 + package let invokedFunctionARN: String + package let traceID: String + package let clientContext: String? + package let cognitoIdentity: String? - init(headers: HTTPHeaders) throws { + package init(headers: HTTPHeaders) throws { guard let requestID = headers.first(name: AmazonHeaders.requestID), !requestID.isEmpty else { throw LambdaRuntimeError.invocationMissingHeader(AmazonHeaders.requestID) } diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift b/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift index b7c1683a..6ecafa5a 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift @@ -132,7 +132,7 @@ final class LambdaRunner { } extension LambdaContext { - init(logger: Logger, eventLoop: EventLoop, allocator: ByteBufferAllocator, invocation: Invocation) { + init(logger: Logger, eventLoop: EventLoop, allocator: ByteBufferAllocator, invocation: InvocationMetadata) { self.init( requestID: invocation.requestID, traceID: invocation.traceID, diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift index 6836e42e..36f88229 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift @@ -32,14 +32,14 @@ struct LambdaRuntimeClient { } /// Requests invocation from the control plane. - func getNextInvocation(logger: Logger) -> EventLoopFuture<(Invocation, ByteBuffer)> { + func getNextInvocation(logger: Logger) -> EventLoopFuture<(InvocationMetadata, ByteBuffer)> { let url = Consts.invocationURLPrefix + Consts.getNextInvocationURLSuffix logger.debug("requesting work from lambda runtime engine using \(url)") return self.httpClient.get(url: url, headers: LambdaRuntimeClient.defaultHeaders).flatMapThrowing { response in guard response.status == .ok else { throw LambdaRuntimeError.badStatusCode(response.status) } - let invocation = try Invocation(headers: response.headers) + let invocation = try InvocationMetadata(headers: response.headers) guard let event = response.body else { throw LambdaRuntimeError.noBody } @@ -59,7 +59,7 @@ struct LambdaRuntimeClient { /// Reports a result to the Runtime Engine. func reportResults( logger: Logger, - invocation: Invocation, + invocation: InvocationMetadata, result: Result ) -> EventLoopFuture { var url = Consts.invocationURLPrefix + "/" + invocation.requestID diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClientProtocol.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClientProtocol.swift new file mode 100644 index 00000000..f85b1b4f --- /dev/null +++ b/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClientProtocol.swift @@ -0,0 +1,38 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import NIOCore + +package protocol LambdaResponseStreamWriter { + mutating func write(_ buffer: ByteBuffer) async throws + func finish() async throws + func writeAndFinish(_ buffer: ByteBuffer) async throws + func reportError(_ error: any Error) async throws +} + +package protocol LambdaRuntimeClientProtocol { + associatedtype Writer: LambdaResponseStreamWriter + + func nextInvocation() async throws -> (Invocation, Writer) +} + +package struct Invocation { + package var metadata: InvocationMetadata + package var event: ByteBuffer + + package init(metadata: InvocationMetadata, event: ByteBuffer) { + self.metadata = metadata + self.event = event + } +} diff --git a/Tests/AWSLambdaRuntimeCoreTests/ControlPlaneRequestTests.swift b/Tests/AWSLambdaRuntimeCoreTests/ControlPlaneRequestTests.swift index a52446c8..013cf9d8 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/ControlPlaneRequestTests.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/ControlPlaneRequestTests.swift @@ -25,9 +25,9 @@ class InvocationTest: XCTestCase { (AmazonHeaders.invokedFunctionARN, "arn:aws:lambda:us-east-1:123456789012:function:custom-runtime"), ]) - var invocation: Invocation? + var invocation: InvocationMetadata? - XCTAssertNoThrow(invocation = try Invocation(headers: headers)) + XCTAssertNoThrow(invocation = try InvocationMetadata(headers: headers)) XCTAssertNotNil(invocation) guard !invocation!.traceID.isEmpty else { diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeClientTest.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeClientTest.swift index 01d7cafb..749f1c64 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeClientTest.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeClientTest.swift @@ -279,8 +279,8 @@ class LambdaRuntimeClientTest: XCTestCase { (AmazonHeaders.invokedFunctionARN, "arn:aws:lambda:us-east-1:123456789012:function:custom-runtime"), (AmazonHeaders.traceID, "Root=\(AmazonHeaders.generateXRayTraceID());Sampled=1"), ]) - var inv: Invocation? - XCTAssertNoThrow(inv = try Invocation(headers: header)) + var inv: InvocationMetadata? + XCTAssertNoThrow(inv = try InvocationMetadata(headers: header)) guard let invocation = inv else { return } let result = client.reportResults( @@ -332,8 +332,8 @@ class LambdaRuntimeClientTest: XCTestCase { (AmazonHeaders.invokedFunctionARN, "arn:aws:lambda:us-east-1:123456789012:function:custom-runtime"), (AmazonHeaders.traceID, "Root=\(AmazonHeaders.generateXRayTraceID());Sampled=1"), ]) - var inv: Invocation? - XCTAssertNoThrow(inv = try Invocation(headers: header)) + var inv: InvocationMetadata? + XCTAssertNoThrow(inv = try InvocationMetadata(headers: header)) guard let invocation = inv else { return } let result = client.reportResults(logger: logger, invocation: invocation, result: Result.success(nil)) From 4121b35ff9e2060a55fe15d45c5a05c281eaf8e5 Mon Sep 17 00:00:00 2001 From: aryan-25 Date: Thu, 29 Aug 2024 10:03:10 +0100 Subject: [PATCH 019/177] Update LambdaContext (#345) --- .../NewLambdaContext.swift | 140 ++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 Sources/AWSLambdaRuntimeCore/NewLambdaContext.swift diff --git a/Sources/AWSLambdaRuntimeCore/NewLambdaContext.swift b/Sources/AWSLambdaRuntimeCore/NewLambdaContext.swift new file mode 100644 index 00000000..89414728 --- /dev/null +++ b/Sources/AWSLambdaRuntimeCore/NewLambdaContext.swift @@ -0,0 +1,140 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2017-2022 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import Dispatch +import Logging +import NIOCore + +// MARK: - Context + +/// Lambda runtime context. +/// The Lambda runtime generates and passes the `LambdaContext` to the Lambda handler as an argument. +package struct NewLambdaContext: CustomDebugStringConvertible, Sendable { + final class _Storage: Sendable { + let requestID: String + let traceID: String + let invokedFunctionARN: String + let deadline: DispatchWallTime + let cognitoIdentity: String? + let clientContext: String? + let logger: Logger + + init( + requestID: String, + traceID: String, + invokedFunctionARN: String, + deadline: DispatchWallTime, + cognitoIdentity: String?, + clientContext: String?, + logger: Logger + ) { + self.requestID = requestID + self.traceID = traceID + self.invokedFunctionARN = invokedFunctionARN + self.deadline = deadline + self.cognitoIdentity = cognitoIdentity + self.clientContext = clientContext + self.logger = logger + } + } + + private var storage: _Storage + + /// The request ID, which identifies the request that triggered the function invocation. + package var requestID: String { + self.storage.requestID + } + + /// The AWS X-Ray tracing header. + package var traceID: String { + self.storage.traceID + } + + /// The ARN of the Lambda function, version, or alias that's specified in the invocation. + package var invokedFunctionARN: String { + self.storage.invokedFunctionARN + } + + /// The timestamp that the function times out. + package var deadline: DispatchWallTime { + self.storage.deadline + } + + /// For invocations from the AWS Mobile SDK, data about the Amazon Cognito identity provider. + package var cognitoIdentity: String? { + self.storage.cognitoIdentity + } + + /// For invocations from the AWS Mobile SDK, data about the client application and device. + package var clientContext: String? { + self.storage.clientContext + } + + /// `Logger` to log with. + /// + /// - note: The `LogLevel` can be configured using the `LOG_LEVEL` environment variable. + package var logger: Logger { + self.storage.logger + } + + init( + requestID: String, + traceID: String, + invokedFunctionARN: String, + deadline: DispatchWallTime, + cognitoIdentity: String? = nil, + clientContext: String? = nil, + logger: Logger + ) { + self.storage = _Storage( + requestID: requestID, + traceID: traceID, + invokedFunctionARN: invokedFunctionARN, + deadline: deadline, + cognitoIdentity: cognitoIdentity, + clientContext: clientContext, + logger: logger + ) + } + + package func getRemainingTime() -> TimeAmount { + let deadline = self.deadline.millisSinceEpoch + let now = DispatchWallTime.now().millisSinceEpoch + + let remaining = deadline - now + return .milliseconds(remaining) + } + + package var debugDescription: String { + "\(Self.self)(requestID: \(self.requestID), traceID: \(self.traceID), invokedFunctionARN: \(self.invokedFunctionARN), cognitoIdentity: \(self.cognitoIdentity ?? "nil"), clientContext: \(self.clientContext ?? "nil"), deadline: \(self.deadline))" + } + + /// This interface is not part of the public API and must not be used by adopters. This API is not part of semver versioning. + package static func __forTestsOnly( + requestID: String, + traceID: String, + invokedFunctionARN: String, + timeout: DispatchTimeInterval, + logger: Logger, + eventLoop: EventLoop + ) -> NewLambdaContext { + NewLambdaContext( + requestID: requestID, + traceID: traceID, + invokedFunctionARN: invokedFunctionARN, + deadline: .now() + timeout, + logger: logger + ) + } +} From d1a6fbc1326fcc4cc2e862f533ddf96ccf853e99 Mon Sep 17 00:00:00 2001 From: aryan-25 Date: Fri, 30 Aug 2024 13:47:51 +0100 Subject: [PATCH 020/177] Set container image argument to "swiftlang/swift:nightly-6.0-jammy" for API breakage and documentation checks. (#346) Co-authored-by: Fabian Fett --- .github/workflows/pull_request.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 814e6ed5..39e033e2 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -11,6 +11,8 @@ jobs: with: license_header_check_project_name: "SwiftAWSLambdaRuntime" shell_check_enabled: false + api_breakage_check_container_image: "swiftlang/swift:nightly-6.0-jammy" + docs_check_container_image: "swiftlang/swift:nightly-6.0-jammy" unit-tests: name: Unit tests From e147eccd4675f23678f7d1f317c6b4d01e18a492 Mon Sep 17 00:00:00 2001 From: Fabian Fett Date: Fri, 30 Aug 2024 15:51:12 +0200 Subject: [PATCH 021/177] Add `swift-testing` dependency (#349) --- Package.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Package.swift b/Package.swift index 38a18f83..63d83b7b 100644 --- a/Package.swift +++ b/Package.swift @@ -26,6 +26,7 @@ let package = Package( .package(url: "https://github.com/apple/swift-nio.git", .upToNextMajor(from: "2.67.0")), .package(url: "https://github.com/apple/swift-log.git", .upToNextMajor(from: "1.5.4")), .package(url: "https://github.com/apple/swift-docc-plugin.git", from: "1.0.0"), + .package(url: "https://github.com/apple/swift-testing.git", branch: "swift-DEVELOPMENT-SNAPSHOT-2024-08-29-a"), ], targets: [ .target( @@ -64,6 +65,7 @@ let package = Package( .byName(name: "AWSLambdaRuntimeCore"), .product(name: "NIOTestUtils", package: "swift-nio"), .product(name: "NIOFoundationCompat", package: "swift-nio"), + .product(name: "Testing", package: "swift-testing"), ], swiftSettings: [.swiftLanguageMode(.v5)] ), @@ -72,6 +74,7 @@ let package = Package( dependencies: [ .byName(name: "AWSLambdaRuntimeCore"), .byName(name: "AWSLambdaRuntime"), + .product(name: "Testing", package: "swift-testing"), ], swiftSettings: [.swiftLanguageMode(.v5)] ), From 223c3bab89fb2a077ce8b02e32e1a127d49d7975 Mon Sep 17 00:00:00 2001 From: Fabian Fett Date: Fri, 30 Aug 2024 19:35:05 +0200 Subject: [PATCH 022/177] Don't use hardcoded port for MockServer (#350) --- .../LambdaHandlerTest.swift | 97 ++++++++++++++----- .../LambdaTest.swift | 9 +- .../MockLambdaServer.swift | 12 ++- Tests/AWSLambdaRuntimeCoreTests/Utils.swift | 7 +- 4 files changed, 95 insertions(+), 30 deletions(-) diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaHandlerTest.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaHandlerTest.swift index 6f6c248b..7ba88ed1 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/LambdaHandlerTest.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/LambdaHandlerTest.swift @@ -22,7 +22,9 @@ class LambdaHandlerTest: XCTestCase { func testBootstrapSimpleNoInit() { let server = MockLambdaServer(behavior: Behavior()) - XCTAssertNoThrow(try server.start().wait()) + var port: Int? + XCTAssertNoThrow(port = try server.start().wait()) + guard let port else { return XCTFail("Expected the server to have started") } defer { XCTAssertNoThrow(try server.stop().wait()) } struct TestBootstrapHandler: SimpleLambdaHandler { @@ -32,14 +34,19 @@ class LambdaHandlerTest: XCTestCase { } let maxTimes = Int.random(in: 10...20) - let configuration = LambdaConfiguration(lifecycle: .init(maxTimes: maxTimes)) + let configuration = LambdaConfiguration( + lifecycle: .init(maxTimes: maxTimes), + runtimeEngine: .init(address: "127.0.0.1:\(port)") + ) let result = Lambda.run(configuration: configuration, handlerType: TestBootstrapHandler.self) assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) } func testBootstrapSimpleInit() { let server = MockLambdaServer(behavior: Behavior()) - XCTAssertNoThrow(try server.start().wait()) + var port: Int? + XCTAssertNoThrow(port = try server.start().wait()) + guard let port else { return XCTFail("Expected the server to have started") } defer { XCTAssertNoThrow(try server.stop().wait()) } struct TestBootstrapHandler: SimpleLambdaHandler { @@ -56,7 +63,10 @@ class LambdaHandlerTest: XCTestCase { } let maxTimes = Int.random(in: 10...20) - let configuration = LambdaConfiguration(lifecycle: .init(maxTimes: maxTimes)) + let configuration = LambdaConfiguration( + lifecycle: .init(maxTimes: maxTimes), + runtimeEngine: .init(address: "127.0.0.1:\(port)") + ) let result = Lambda.run(configuration: configuration, handlerType: TestBootstrapHandler.self) assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) } @@ -65,7 +75,9 @@ class LambdaHandlerTest: XCTestCase { func testBootstrapSuccess() { let server = MockLambdaServer(behavior: Behavior()) - XCTAssertNoThrow(try server.start().wait()) + var port: Int? + XCTAssertNoThrow(port = try server.start().wait()) + guard let port else { return XCTFail("Expected the server to have started") } defer { XCTAssertNoThrow(try server.stop().wait()) } struct TestBootstrapHandler: LambdaHandler { @@ -83,14 +95,19 @@ class LambdaHandlerTest: XCTestCase { } let maxTimes = Int.random(in: 10...20) - let configuration = LambdaConfiguration(lifecycle: .init(maxTimes: maxTimes)) + let configuration = LambdaConfiguration( + lifecycle: .init(maxTimes: maxTimes), + runtimeEngine: .init(address: "127.0.0.1:\(port)") + ) let result = Lambda.run(configuration: configuration, handlerType: TestBootstrapHandler.self) assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) } func testBootstrapFailure() { let server = MockLambdaServer(behavior: FailedBootstrapBehavior()) - XCTAssertNoThrow(try server.start().wait()) + var port: Int? + XCTAssertNoThrow(port = try server.start().wait()) + guard let port else { return XCTFail("Expected the server to have started") } defer { XCTAssertNoThrow(try server.stop().wait()) } struct TestBootstrapHandler: LambdaHandler { @@ -108,14 +125,19 @@ class LambdaHandlerTest: XCTestCase { } let maxTimes = Int.random(in: 10...20) - let configuration = LambdaConfiguration(lifecycle: .init(maxTimes: maxTimes)) + let configuration = LambdaConfiguration( + lifecycle: .init(maxTimes: maxTimes), + runtimeEngine: .init(address: "127.0.0.1:\(port)") + ) let result = Lambda.run(configuration: configuration, handlerType: TestBootstrapHandler.self) assertLambdaRuntimeResult(result, shouldFailWithError: TestError("kaboom")) } func testHandlerSuccess() { let server = MockLambdaServer(behavior: Behavior()) - XCTAssertNoThrow(try server.start().wait()) + var port: Int? + XCTAssertNoThrow(port = try server.start().wait()) + guard let port else { return XCTFail("Expected the server to have started") } defer { XCTAssertNoThrow(try server.stop().wait()) } struct Handler: SimpleLambdaHandler { @@ -125,14 +147,19 @@ class LambdaHandlerTest: XCTestCase { } let maxTimes = Int.random(in: 1...10) - let configuration = LambdaConfiguration(lifecycle: .init(maxTimes: maxTimes)) + let configuration = LambdaConfiguration( + lifecycle: .init(maxTimes: maxTimes), + runtimeEngine: .init(address: "127.0.0.1:\(port)") + ) let result = Lambda.run(configuration: configuration, handlerType: Handler.self) assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) } func testVoidHandlerSuccess() { let server = MockLambdaServer(behavior: Behavior(result: .success(nil))) - XCTAssertNoThrow(try server.start().wait()) + var port: Int? + XCTAssertNoThrow(port = try server.start().wait()) + guard let port else { return XCTFail("Expected the server to have started") } defer { XCTAssertNoThrow(try server.stop().wait()) } struct Handler: SimpleLambdaHandler { @@ -140,7 +167,10 @@ class LambdaHandlerTest: XCTestCase { } let maxTimes = Int.random(in: 1...10) - let configuration = LambdaConfiguration(lifecycle: .init(maxTimes: maxTimes)) + let configuration = LambdaConfiguration( + lifecycle: .init(maxTimes: maxTimes), + runtimeEngine: .init(address: "127.0.0.1:\(port)") + ) let result = Lambda.run(configuration: configuration, handlerType: Handler.self) assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) @@ -148,7 +178,9 @@ class LambdaHandlerTest: XCTestCase { func testHandlerFailure() { let server = MockLambdaServer(behavior: Behavior(result: .failure(TestError("boom")))) - XCTAssertNoThrow(try server.start().wait()) + var port: Int? + XCTAssertNoThrow(port = try server.start().wait()) + guard let port else { return XCTFail("Expected the server to have started") } defer { XCTAssertNoThrow(try server.stop().wait()) } struct Handler: SimpleLambdaHandler { @@ -158,7 +190,10 @@ class LambdaHandlerTest: XCTestCase { } let maxTimes = Int.random(in: 1...10) - let configuration = LambdaConfiguration(lifecycle: .init(maxTimes: maxTimes)) + let configuration = LambdaConfiguration( + lifecycle: .init(maxTimes: maxTimes), + runtimeEngine: .init(address: "127.0.0.1:\(port)") + ) let result = Lambda.run(configuration: configuration, handlerType: Handler.self) assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) } @@ -167,7 +202,9 @@ class LambdaHandlerTest: XCTestCase { func testEventLoopSuccess() { let server = MockLambdaServer(behavior: Behavior()) - XCTAssertNoThrow(try server.start().wait()) + var port: Int? + XCTAssertNoThrow(port = try server.start().wait()) + guard let port else { return XCTFail("Expected the server to have started") } defer { XCTAssertNoThrow(try server.stop().wait()) } struct Handler: EventLoopLambdaHandler { @@ -181,14 +218,19 @@ class LambdaHandlerTest: XCTestCase { } let maxTimes = Int.random(in: 1...10) - let configuration = LambdaConfiguration(lifecycle: .init(maxTimes: maxTimes)) + let configuration = LambdaConfiguration( + lifecycle: .init(maxTimes: maxTimes), + runtimeEngine: .init(address: "127.0.0.1:\(port)") + ) let result = Lambda.run(configuration: configuration, handlerType: Handler.self) assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) } func testVoidEventLoopSuccess() { let server = MockLambdaServer(behavior: Behavior(result: .success(nil))) - XCTAssertNoThrow(try server.start().wait()) + var port: Int? + XCTAssertNoThrow(port = try server.start().wait()) + guard let port else { return XCTFail("Expected the server to have started") } defer { XCTAssertNoThrow(try server.stop().wait()) } struct Handler: EventLoopLambdaHandler { @@ -202,14 +244,19 @@ class LambdaHandlerTest: XCTestCase { } let maxTimes = Int.random(in: 1...10) - let configuration = LambdaConfiguration(lifecycle: .init(maxTimes: maxTimes)) + let configuration = LambdaConfiguration( + lifecycle: .init(maxTimes: maxTimes), + runtimeEngine: .init(address: "127.0.0.1:\(port)") + ) let result = Lambda.run(configuration: configuration, handlerType: Handler.self) assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) } func testEventLoopFailure() { let server = MockLambdaServer(behavior: Behavior(result: .failure(TestError("boom")))) - XCTAssertNoThrow(try server.start().wait()) + var port: Int? + XCTAssertNoThrow(port = try server.start().wait()) + guard let port else { return XCTFail("Expected the server to have started") } defer { XCTAssertNoThrow(try server.stop().wait()) } struct Handler: EventLoopLambdaHandler { @@ -223,14 +270,19 @@ class LambdaHandlerTest: XCTestCase { } let maxTimes = Int.random(in: 1...10) - let configuration = LambdaConfiguration(lifecycle: .init(maxTimes: maxTimes)) + let configuration = LambdaConfiguration( + lifecycle: .init(maxTimes: maxTimes), + runtimeEngine: .init(address: "127.0.0.1:\(port)") + ) let result = Lambda.run(configuration: configuration, handlerType: Handler.self) assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) } func testEventLoopBootstrapFailure() { let server = MockLambdaServer(behavior: FailedBootstrapBehavior()) - XCTAssertNoThrow(try server.start().wait()) + var port: Int? + XCTAssertNoThrow(port = try server.start().wait()) + guard let port else { return XCTFail("Expected the server to have started") } defer { XCTAssertNoThrow(try server.stop().wait()) } struct Handler: EventLoopLambdaHandler { @@ -244,7 +296,8 @@ class LambdaHandlerTest: XCTestCase { } } - let result = Lambda.run(configuration: .init(), handlerType: Handler.self) + let configuration = LambdaConfiguration(runtimeEngine: .init(address: "127.0.0.1:\(port)")) + let result = Lambda.run(configuration: configuration, handlerType: Handler.self) assertLambdaRuntimeResult(result, shouldFailWithError: TestError("kaboom")) } } diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaTest.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaTest.swift index ea4ebc9d..9379f5ee 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/LambdaTest.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/LambdaTest.swift @@ -272,11 +272,16 @@ class LambdaTest: XCTestCase { let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) defer { XCTAssertNoThrow(try eventLoopGroup.syncShutdownGracefully()) } - let server = try await MockLambdaServer(behavior: Behavior()).start().get() + let server = MockLambdaServer(behavior: Behavior(), port: 0) + var port: Int? + XCTAssertNoThrow(port = try server.start().wait()) + guard let port else { return XCTFail("Expected the server to have started") } defer { XCTAssertNoThrow(try server.stop().wait()) } let logger = Logger(label: "TestLogger") - let configuration = LambdaConfiguration(runtimeEngine: .init(requestTimeout: .milliseconds(100))) + let configuration = LambdaConfiguration( + runtimeEngine: .init(address: "127.0.0.1:\(port)", requestTimeout: .milliseconds(100)) + ) let handler1 = Handler() let task = Task.detached { diff --git a/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift b/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift index 63ed9d9c..14134aad 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift @@ -43,14 +43,18 @@ final class MockLambdaServer { assert(shutdown) } - func start() -> EventLoopFuture { + func start() -> EventLoopFuture { let bootstrap = ServerBootstrap(group: group) .serverChannelOption(ChannelOptions.socket(SocketOptionLevel(SOL_SOCKET), SO_REUSEADDR), value: 1) .childChannelInitializer { channel in - channel.pipeline.configureHTTPServerPipeline(withErrorHandling: true).flatMap { _ in - channel.pipeline.addHandler( + do { + try channel.pipeline.syncOperations.configureHTTPServerPipeline(withErrorHandling: true) + try channel.pipeline.syncOperations.addHandler( HTTPHandler(logger: self.logger, keepAlive: self.keepAlive, behavior: self.behavior) ) + return channel.eventLoop.makeSucceededVoidFuture() + } catch { + return channel.eventLoop.makeFailedFuture(error) } } return bootstrap.bind(host: self.host, port: self.port).flatMap { channel in @@ -59,7 +63,7 @@ final class MockLambdaServer { return channel.eventLoop.makeFailedFuture(ServerError.cantBind) } self.logger.info("\(self) started and listening on \(localAddress)") - return channel.eventLoop.makeSucceededFuture(self) + return channel.eventLoop.makeSucceededFuture(localAddress.port!) } } diff --git a/Tests/AWSLambdaRuntimeCoreTests/Utils.swift b/Tests/AWSLambdaRuntimeCoreTests/Utils.swift index 14e15b6c..8bbd4730 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/Utils.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/Utils.swift @@ -82,10 +82,13 @@ func runLambda( let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) defer { XCTAssertNoThrow(try eventLoopGroup.syncShutdownGracefully()) } let logger = Logger(label: "TestLogger") - let configuration = LambdaConfiguration(runtimeEngine: .init(requestTimeout: .milliseconds(100))) + let server = MockLambdaServer(behavior: behavior, port: 0) + let port = try server.start().wait() + let configuration = LambdaConfiguration( + runtimeEngine: .init(address: "127.0.0.1:\(port)", requestTimeout: .milliseconds(100)) + ) let terminator = LambdaTerminator() let runner = LambdaRunner(eventLoop: eventLoopGroup.next(), configuration: configuration) - let server = try MockLambdaServer(behavior: behavior).start().wait() defer { XCTAssertNoThrow(try server.stop().wait()) } try runner.initialize(handlerProvider: handlerProvider, logger: logger, terminator: terminator).flatMap { handler in runner.run(handler: handler, logger: logger) From b2da91df463887309154c2bf996c9d9c351ec5c6 Mon Sep 17 00:00:00 2001 From: aryan-25 Date: Mon, 2 Sep 2024 12:53:45 +0100 Subject: [PATCH 023/177] Add `runLoop` function (#347) Co-authored-by: Fabian Fett --- Sources/AWSLambdaRuntimeCore/NewLambda.swift | 56 ++++ .../LambdaMockClient.swift | 295 ++++++++++++++++++ .../LambdaRunLoopTests.swift | 89 ++++++ 3 files changed, 440 insertions(+) create mode 100644 Sources/AWSLambdaRuntimeCore/NewLambda.swift create mode 100644 Tests/AWSLambdaRuntimeCoreTests/LambdaMockClient.swift create mode 100644 Tests/AWSLambdaRuntimeCoreTests/LambdaRunLoopTests.swift diff --git a/Sources/AWSLambdaRuntimeCore/NewLambda.swift b/Sources/AWSLambdaRuntimeCore/NewLambda.swift new file mode 100644 index 00000000..5adb8f57 --- /dev/null +++ b/Sources/AWSLambdaRuntimeCore/NewLambda.swift @@ -0,0 +1,56 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import Dispatch +import Logging +import NIOCore + +package protocol StreamingLambdaHandler { + mutating func handle( + _ event: ByteBuffer, + responseWriter: some LambdaResponseStreamWriter, + context: NewLambdaContext + ) async throws +} + +extension Lambda { + package static func runLoop( + runtimeClient: RuntimeClient, + handler: Handler, + logger: Logger + ) async throws where Handler: StreamingLambdaHandler { + var handler = handler + + while !Task.isCancelled { + let (invocation, writer) = try await runtimeClient.nextInvocation() + + do { + try await handler.handle( + invocation.event, + responseWriter: writer, + context: NewLambdaContext( + requestID: invocation.metadata.requestID, + traceID: invocation.metadata.traceID, + invokedFunctionARN: invocation.metadata.invokedFunctionARN, + deadline: DispatchWallTime(millisSinceEpoch: invocation.metadata.deadlineInMillisSinceEpoch), + logger: logger + ) + ) + } catch { + try await writer.reportError(error) + continue + } + } + } +} diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaMockClient.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaMockClient.swift new file mode 100644 index 00000000..4023dc76 --- /dev/null +++ b/Tests/AWSLambdaRuntimeCoreTests/LambdaMockClient.swift @@ -0,0 +1,295 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import AWSLambdaRuntimeCore +import Foundation +import Logging +import NIOCore + +struct LambdaMockWriter: LambdaResponseStreamWriter { + var underlying: LambdaMockClient + + init(underlying: LambdaMockClient) { + self.underlying = underlying + } + + mutating func write(_ buffer: ByteBuffer) async throws { + try await self.underlying.write(buffer) + } + + func finish() async throws { + try await self.underlying.finish() + } + + func writeAndFinish(_ buffer: ByteBuffer) async throws { + try await self.underlying.write(buffer) + try await self.underlying.finish() + } + + func reportError(_ error: any Error) async throws { + await self.underlying.reportError(error) + } +} + +enum LambdaError: Error, Equatable { + case cannotCallNextEndpointWhenAlreadyWaitingForEvent + case cannotCallNextEndpointWhenAlreadyProcessingAnEvent + case cannotReportResultWhenNoEventHasBeenProcessed + case cancelError + case handlerError +} + +final actor LambdaMockClient: LambdaRuntimeClientProtocol { + typealias Writer = LambdaMockWriter + + private struct StateMachine { + private enum State { + // The Lambda has just started, or an event has finished processing and the runtime is ready to receive more events. + // Expecting a next() call by the runtime. + case initialState + + // The next endpoint has been called but no event has arrived yet. + case waitingForNextEvent(eventArrivedHandler: CheckedContinuation) + + // The handler is processing the event. Buffers written to the writer are accumulated. + case handlerIsProcessing( + accumulatedResponse: [ByteBuffer], + eventProcessedHandler: CheckedContinuation + ) + } + + private var state: State = .initialState + + // Queue incoming events if the runtime is busy handling an event. + private var eventQueue = [Event]() + + enum InvokeAction { + // The next endpoint is waiting for an event. Deliver this newly arrived event to it. + case readyToProcess(_ eventArrivedHandler: CheckedContinuation) + + // The next endpoint has not been called yet. This event has been added to the queue. + case wait + } + + enum NextAction { + // There is an event available to be processed. + case readyToProcess(Invocation) + + // No events available yet. Wait for an event to arrive. + case wait + + case fail(LambdaError) + } + + enum CancelNextAction { + case none + + case cancelContinuation(CheckedContinuation) + } + + enum ResultAction { + case readyForMore + + case fail(LambdaError) + } + + enum FailProcessingAction { + case none + + case throwContinuation(CheckedContinuation) + } + + mutating func next(_ eventArrivedHandler: CheckedContinuation) -> NextAction { + switch self.state { + case .initialState: + if self.eventQueue.isEmpty { + // No event available yet -- store the continuation for the next invoke() call. + self.state = .waitingForNextEvent(eventArrivedHandler: eventArrivedHandler) + return .wait + } else { + // An event is already waiting to be processed + let event = self.eventQueue.removeFirst() // TODO: use Deque + + self.state = .handlerIsProcessing( + accumulatedResponse: [], + eventProcessedHandler: event.eventProcessedHandler + ) + return .readyToProcess(event.invocation) + } + case .waitingForNextEvent: + return .fail(.cannotCallNextEndpointWhenAlreadyWaitingForEvent) + case .handlerIsProcessing: + return .fail(.cannotCallNextEndpointWhenAlreadyProcessingAnEvent) + } + } + + mutating func invoke(_ event: Event) -> InvokeAction { + switch self.state { + case .initialState, .handlerIsProcessing: + // next() hasn't been called yet. Add to the event queue. + self.eventQueue.append(event) + return .wait + case .waitingForNextEvent(let eventArrivedHandler): + // The runtime is already waiting for an event + self.state = .handlerIsProcessing( + accumulatedResponse: [], + eventProcessedHandler: event.eventProcessedHandler + ) + return .readyToProcess(eventArrivedHandler) + } + } + + mutating func writeResult(buffer: ByteBuffer) -> ResultAction { + switch self.state { + case .handlerIsProcessing(var accumulatedResponse, let eventProcessedHandler): + accumulatedResponse.append(buffer) + self.state = .handlerIsProcessing( + accumulatedResponse: accumulatedResponse, + eventProcessedHandler: eventProcessedHandler + ) + return .readyForMore + case .initialState, .waitingForNextEvent: + return .fail(.cannotReportResultWhenNoEventHasBeenProcessed) + } + } + + mutating func finish() throws { + switch self.state { + case .handlerIsProcessing(let accumulatedResponse, let eventProcessedHandler): + let finalResult: ByteBuffer = accumulatedResponse.reduce(ByteBuffer()) { (accumulated, current) in + var accumulated = accumulated + accumulated.writeBytes(current.readableBytesView) + return accumulated + } + + eventProcessedHandler.resume(returning: finalResult) + // reset back to the initial state + self.state = .initialState + case .initialState, .waitingForNextEvent: + throw LambdaError.cannotReportResultWhenNoEventHasBeenProcessed + } + } + + mutating func cancelNext() -> CancelNextAction { + switch self.state { + case .initialState, .handlerIsProcessing: + return .none + case .waitingForNextEvent(let eventArrivedHandler): + self.state = .initialState + return .cancelContinuation(eventArrivedHandler) + } + } + + mutating func failProcessing() -> FailProcessingAction { + switch self.state { + case .initialState, .waitingForNextEvent: + // Cannot report an error for an event if the event is not currently being processed. + fatalError() + case .handlerIsProcessing(_, let eventProcessedHandler): + return .throwContinuation(eventProcessedHandler) + } + } + } + + private var stateMachine = StateMachine() + + struct Event { + let invocation: Invocation + let eventProcessedHandler: CheckedContinuation + } + + func invoke(event: ByteBuffer) async throws -> ByteBuffer { + try await withCheckedThrowingContinuation { eventProcessedHandler in + do { + let metadata = try InvocationMetadata( + headers: .init([ + ("Lambda-Runtime-Aws-Request-Id", "100"), // arbitrary values + ("Lambda-Runtime-Deadline-Ms", "100"), + ("Lambda-Runtime-Invoked-Function-Arn", "100"), + ]) + ) + let invocation = Invocation(metadata: metadata, event: event) + + let invokeAction = self.stateMachine.invoke( + Event( + invocation: invocation, + eventProcessedHandler: eventProcessedHandler + ) + ) + + switch invokeAction { + case .readyToProcess(let eventArrivedHandler): + // nextInvocation had been called earlier and is currently waiting for an event; deliver + eventArrivedHandler.resume(returning: invocation) + case .wait: + // The event has been added to the event queue; wait for it to be picked up + break + } + } catch { + eventProcessedHandler.resume(throwing: error) + } + } + } + + func nextInvocation() async throws -> (Invocation, Writer) { + try await withTaskCancellationHandler { + let invocation = try await withCheckedThrowingContinuation { eventArrivedHandler in + switch self.stateMachine.next(eventArrivedHandler) { + case .readyToProcess(let event): + eventArrivedHandler.resume(returning: event) + case .fail(let error): + eventArrivedHandler.resume(throwing: error) + case .wait: + break + } + } + return (invocation, Writer(underlying: self)) + } onCancel: { + Task { + await self.cancelNextInvocation() + } + } + } + + private func cancelNextInvocation() { + switch self.stateMachine.cancelNext() { + case .none: + break + case .cancelContinuation(let continuation): + continuation.resume(throwing: LambdaError.cancelError) + } + } + + func write(_ buffer: ByteBuffer) async throws { + switch self.stateMachine.writeResult(buffer: buffer) { + case .readyForMore: + break + case .fail(let error): + throw error + } + } + + func finish() async throws { + try self.stateMachine.finish() + } + + func reportError(_ error: any Error) { + switch self.stateMachine.failProcessing() { + case .none: + break + case .throwContinuation(let continuation): + continuation.resume(throwing: error) + } + } +} diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaRunLoopTests.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaRunLoopTests.swift new file mode 100644 index 00000000..d85d7f92 --- /dev/null +++ b/Tests/AWSLambdaRuntimeCoreTests/LambdaRunLoopTests.swift @@ -0,0 +1,89 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import Foundation +import Logging +import NIOCore +import Testing + +@testable import AWSLambdaRuntimeCore + +@Suite +struct LambdaRunLoopTests { + struct MockEchoHandler: StreamingLambdaHandler { + func handle( + _ event: ByteBuffer, + responseWriter: some LambdaResponseStreamWriter, + context: NewLambdaContext + ) async throws { + try await responseWriter.writeAndFinish(event) + } + } + + struct FailingHandler: StreamingLambdaHandler { + func handle( + _ event: ByteBuffer, + responseWriter: some LambdaResponseStreamWriter, + context: NewLambdaContext + ) async throws { + throw LambdaError.handlerError + } + } + + let mockClient = LambdaMockClient() + let mockEchoHandler = MockEchoHandler() + let failingHandler = FailingHandler() + + @Test func testRunLoop() async throws { + let inputEvent = ByteBuffer(string: "Test Invocation Event") + + try await withThrowingTaskGroup(of: Void.self) { group in + group.addTask { + try await Lambda.runLoop( + runtimeClient: self.mockClient, + handler: self.mockEchoHandler, + logger: Logger(label: "RunLoopTest") + ) + } + + let response = try await self.mockClient.invoke(event: inputEvent) + #expect(response == inputEvent) + + group.cancelAll() + } + } + + @Test func testRunLoopError() async throws { + let inputEvent = ByteBuffer(string: "Test Invocation Event") + + await withThrowingTaskGroup(of: Void.self) { group in + group.addTask { + try await Lambda.runLoop( + runtimeClient: self.mockClient, + handler: self.failingHandler, + logger: Logger(label: "RunLoopTest") + ) + } + + await #expect( + throws: LambdaError.handlerError, + performing: { + try await self.mockClient.invoke(event: inputEvent) + } + ) + + group.cancelAll() + } + } +} From 4b45451dc1e9d3884488c305b1dda46afb588abd Mon Sep 17 00:00:00 2001 From: aryan-25 Date: Wed, 4 Sep 2024 12:46:00 +0100 Subject: [PATCH 024/177] Add new handler protocols + Codable support (#351) --- Sources/AWSLambdaRuntime/Lambda+Codable.swift | 46 +++++ .../LambdaRuntimeClientProtocol.swift | 6 +- .../AWSLambdaRuntimeCore/NewLambda+JSON.swift | 161 ++++++++++++++++ Sources/AWSLambdaRuntimeCore/NewLambda.swift | 9 - .../NewLambdaContext.swift | 3 +- .../NewLambdaHandlers.swift | 173 ++++++++++++++++++ .../LambdaMockClient.swift | 4 +- .../NewLambda+CodableTests.swift | 100 ++++++++++ 8 files changed, 486 insertions(+), 16 deletions(-) create mode 100644 Sources/AWSLambdaRuntimeCore/NewLambda+JSON.swift create mode 100644 Sources/AWSLambdaRuntimeCore/NewLambdaHandlers.swift create mode 100644 Tests/AWSLambdaRuntimeTests/NewLambda+CodableTests.swift diff --git a/Sources/AWSLambdaRuntime/Lambda+Codable.swift b/Sources/AWSLambdaRuntime/Lambda+Codable.swift index 3f80ee17..fedd85c9 100644 --- a/Sources/AWSLambdaRuntime/Lambda+Codable.swift +++ b/Sources/AWSLambdaRuntime/Lambda+Codable.swift @@ -16,9 +16,13 @@ import NIOCore import NIOFoundationCompat +#if canImport(FoundationEssentials) +import FoundationEssentials +#else import struct Foundation.Data import class Foundation.JSONDecoder import class Foundation.JSONEncoder +#endif // MARK: - SimpleLambdaHandler Codable support @@ -138,3 +142,45 @@ extension Lambda { extension JSONDecoder: LambdaCodableDecoder {} extension JSONEncoder: LambdaCodableEncoder {} + +extension JSONDecoder: AWSLambdaRuntimeCore.LambdaEventDecoder {} + +@usableFromInline +package struct LambdaJSONOutputEncoder: LambdaOutputEncoder { + @usableFromInline let jsonEncoder: JSONEncoder + + @inlinable + package init(_ jsonEncoder: JSONEncoder) { + self.jsonEncoder = jsonEncoder + } + + @inlinable + package func encode(_ value: Output, into buffer: inout ByteBuffer) throws { + try self.jsonEncoder.encode(value, into: &buffer) + } +} + +extension LambdaCodableAdapter { + /// Initializes an instance given an encoder, decoder, and a handler with a non-`Void` output. + /// - Parameters: + /// - encoder: The encoder object that will be used to encode the generic ``Output`` obtained from the `handler`'s `outputWriter` into a ``ByteBuffer``. + /// - decoder: The decoder object that will be used to decode the received ``ByteBuffer`` event into the generic ``Event`` type served to the `handler`. + /// - handler: The handler object. + package init( + encoder: JSONEncoder, + decoder: JSONDecoder, + handler: Handler + ) + where + Output: Encodable, + Output == Handler.Output, + Encoder == LambdaJSONOutputEncoder, + Decoder == JSONDecoder + { + self.init( + encoder: LambdaJSONOutputEncoder(encoder), + decoder: decoder, + handler: handler + ) + } +} diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClientProtocol.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClientProtocol.swift index f85b1b4f..801bdf82 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClientProtocol.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClientProtocol.swift @@ -14,15 +14,15 @@ import NIOCore -package protocol LambdaResponseStreamWriter { - mutating func write(_ buffer: ByteBuffer) async throws +package protocol LambdaRuntimeClientResponseStreamWriter: LambdaResponseStreamWriter { + func write(_ buffer: ByteBuffer) async throws func finish() async throws func writeAndFinish(_ buffer: ByteBuffer) async throws func reportError(_ error: any Error) async throws } package protocol LambdaRuntimeClientProtocol { - associatedtype Writer: LambdaResponseStreamWriter + associatedtype Writer: LambdaRuntimeClientResponseStreamWriter func nextInvocation() async throws -> (Invocation, Writer) } diff --git a/Sources/AWSLambdaRuntimeCore/NewLambda+JSON.swift b/Sources/AWSLambdaRuntimeCore/NewLambda+JSON.swift new file mode 100644 index 00000000..4475a81f --- /dev/null +++ b/Sources/AWSLambdaRuntimeCore/NewLambda+JSON.swift @@ -0,0 +1,161 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import NIOCore + +/// The protocol a decoder must conform to so that it can be used with ``LambdaCodableAdapter`` to decode incoming +/// ``ByteBuffer`` events. +package protocol LambdaEventDecoder { + /// Decode the ``ByteBuffer`` representing the received event into the generic ``Event`` type + /// the handler will receive. + /// - Parameters: + /// - type: The type of the object to decode the buffer into. + /// - buffer: The buffer to be decoded. + /// - Returns: An object containing the decoded data. + func decode(_ type: Event.Type, from buffer: ByteBuffer) throws -> Event +} + +/// The protocol an encoder must conform to so that it can be used with ``LambdaCodableAdapter`` to encode the generic +/// ``Output`` object into a ``ByteBuffer``. +package protocol LambdaOutputEncoder { + associatedtype Output + + /// Encode the generic type `Output` the handler has returned into a ``ByteBuffer``. + /// - Parameters: + /// - value: The object to encode into a ``ByteBuffer``. + /// - buffer: The ``ByteBuffer`` where the encoded value will be written to. + func encode(_ value: Output, into buffer: inout ByteBuffer) throws +} + +package struct VoidEncoder: LambdaOutputEncoder { + package typealias Output = Void + + @inlinable + package func encode(_ value: Void, into buffer: inout NIOCore.ByteBuffer) throws {} +} + +/// Adapts a ``NewLambdaHandler`` conforming handler to conform to ``LambdaWithBackgroundProcessingHandler``. +package struct LambdaHandlerAdapter< + Event: Decodable, + Output, + Handler: NewLambdaHandler +>: LambdaWithBackgroundProcessingHandler where Handler.Event == Event, Handler.Output == Output { + @usableFromInline let handler: Handler + + /// Initializes an instance given a concrete handler. + /// - Parameter handler: The ``NewLambdaHandler`` conforming handler that is to be adapted to ``LambdaWithBackgroundProcessingHandler``. + @inlinable + package init(handler: Handler) { + self.handler = handler + } + + /// Passes the generic ``Event`` object to the ``NewLambdaHandler/handle(_:context:)`` function, and + /// the resulting output is then written to ``LambdaWithBackgroundProcessingHandler``'s `outputWriter`. + /// - Parameters: + /// - event: The received event. + /// - outputWriter: The writer to write the computed response to. + /// - context: The ``NewLambdaContext`` containing the invocation's metadata. + @inlinable + package func handle( + _ event: Event, + outputWriter: some LambdaResponseWriter, + context: NewLambdaContext + ) async throws { + let output = try await self.handler.handle(event, context: context) + try await outputWriter.write(output) + } +} + +/// Adapts a ``LambdaWithBackgroundProcessingHandler`` conforming handler to conform to ``StreamingLambdaHandler``. +package struct LambdaCodableAdapter< + Handler: LambdaWithBackgroundProcessingHandler, + Event: Decodable, + Output, + Decoder: LambdaEventDecoder, + Encoder: LambdaOutputEncoder +>: StreamingLambdaHandler where Handler.Event == Event, Handler.Output == Output, Encoder.Output == Output { + @usableFromInline let handler: Handler + @usableFromInline let encoder: Encoder + @usableFromInline let decoder: Decoder + // + @usableFromInline var byteBuffer: ByteBuffer = .init() + + /// Initializes an instance given an encoder, decoder, and a handler with a non-`Void` output. + /// - Parameters: + /// - encoder: The encoder object that will be used to encode the generic ``Output`` obtained from the `handler`'s `outputWriter` into a ``ByteBuffer``. + /// - decoder: The decoder object that will be used to decode the received ``ByteBuffer`` event into the generic ``Event`` type served to the `handler`. + /// - handler: The handler object. + @inlinable + package init(encoder: Encoder, decoder: Decoder, handler: Handler) where Output: Encodable { + self.encoder = encoder + self.decoder = decoder + self.handler = handler + } + + /// Initializes an instance given a decoder, and a handler with a `Void` output. + /// - Parameters: + /// - decoder: The decoder object that will be used to decode the received ``ByteBuffer`` event into the generic ``Event`` type served to the `handler`. + /// - handler: The handler object. + @inlinable + package init(decoder: Decoder, handler: Handler) where Output == Void, Encoder == VoidEncoder { + self.encoder = VoidEncoder() + self.decoder = decoder + self.handler = handler + } + + /// A ``StreamingLambdaHandler/handle(_:responseWriter:context:)`` wrapper. + /// - Parameters: + /// - event: The received event. + /// - outputWriter: The writer to write the computed response to. + /// - context: The ``NewLambdaContext`` containing the invocation's metadata. + @inlinable + package mutating func handle( + _ request: ByteBuffer, + responseWriter: Writer, + context: NewLambdaContext + ) async throws { + let event = try self.decoder.decode(Event.self, from: request) + + let writer = LambdaCodableResponseWriter( + encoder: self.encoder, + streamWriter: responseWriter + ) + try await self.handler.handle(event, outputWriter: writer, context: context) + } +} + +/// A ``LambdaResponseStreamWriter`` wrapper that conforms to ``LambdaResponseWriter``. +package struct LambdaCodableResponseWriter: + LambdaResponseWriter +where Output == Encoder.Output { + @usableFromInline let underlyingStreamWriter: Base + @usableFromInline let encoder: Encoder + + /// Initializes an instance given an encoder and an underlying ``LambdaResponseStreamWriter``. + /// - Parameters: + /// - encoder: The encoder object that will be used to encode the generic ``Output`` into a ``ByteBuffer``, which will then be passed to `streamWriter`. + /// - streamWriter: The underlying ``LambdaResponseStreamWriter`` that will be wrapped. + @inlinable + package init(encoder: Encoder, streamWriter: Base) { + self.encoder = encoder + self.underlyingStreamWriter = streamWriter + } + + @inlinable + package func write(_ output: Output) async throws { + var outputBuffer = ByteBuffer() + try self.encoder.encode(output, into: &outputBuffer) + try await self.underlyingStreamWriter.writeAndFinish(outputBuffer) + } +} diff --git a/Sources/AWSLambdaRuntimeCore/NewLambda.swift b/Sources/AWSLambdaRuntimeCore/NewLambda.swift index 5adb8f57..28eb7df9 100644 --- a/Sources/AWSLambdaRuntimeCore/NewLambda.swift +++ b/Sources/AWSLambdaRuntimeCore/NewLambda.swift @@ -14,15 +14,6 @@ import Dispatch import Logging -import NIOCore - -package protocol StreamingLambdaHandler { - mutating func handle( - _ event: ByteBuffer, - responseWriter: some LambdaResponseStreamWriter, - context: NewLambdaContext - ) async throws -} extension Lambda { package static func runLoop( diff --git a/Sources/AWSLambdaRuntimeCore/NewLambdaContext.swift b/Sources/AWSLambdaRuntimeCore/NewLambdaContext.swift index 89414728..abd2e61f 100644 --- a/Sources/AWSLambdaRuntimeCore/NewLambdaContext.swift +++ b/Sources/AWSLambdaRuntimeCore/NewLambdaContext.swift @@ -126,8 +126,7 @@ package struct NewLambdaContext: CustomDebugStringConvertible, Sendable { traceID: String, invokedFunctionARN: String, timeout: DispatchTimeInterval, - logger: Logger, - eventLoop: EventLoop + logger: Logger ) -> NewLambdaContext { NewLambdaContext( requestID: requestID, diff --git a/Sources/AWSLambdaRuntimeCore/NewLambdaHandlers.swift b/Sources/AWSLambdaRuntimeCore/NewLambdaHandlers.swift new file mode 100644 index 00000000..0f9e7412 --- /dev/null +++ b/Sources/AWSLambdaRuntimeCore/NewLambdaHandlers.swift @@ -0,0 +1,173 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import NIOCore + +/// The base handler protocol that receives a ``ByteBuffer`` representing the incoming event and returns the response as a ``ByteBuffer`` too. +/// This handler protocol supports response streaming. Bytes can be streamed outwards through the ``LambdaResponseStreamWriter`` +/// passed as an argument in the ``handle(_:responseWriter:context:)`` function. +/// Background work can also be executed after returning the response. After closing the response stream by calling +/// ``LambdaResponseStreamWriter/finish()`` or ``LambdaResponseStreamWriter/writeAndFinish(_:)``, +/// the ``handle(_:responseWriter:context:)`` function is free to execute any background work. +package protocol StreamingLambdaHandler { + /// The handler function -- implement the business logic of the Lambda function here. + /// - Parameters: + /// - event: The invocation's input data. + /// - responseWriter: A ``LambdaResponseStreamWriter`` to write the invocation's response to. + /// If no response or error is written to `responseWriter` an error will be reported to the invoker. + /// - context: The ``NewLambdaContext`` containing the invocation's metadata. + /// - Throws: + /// How the thrown error will be handled by the runtime: + /// - An invocation error will be reported if the error is thrown before the first call to + /// ``LambdaResponseStreamWriter/write(_:)``. + /// - If the error is thrown after call(s) to ``LambdaResponseStreamWriter/write(_:)`` but before + /// a call to ``LambdaResponseStreamWriter/finish()``, the response stream will be closed and trailing + /// headers will be sent. + /// - If ``LambdaResponseStreamWriter/finish()`` has already been called before the error is thrown, the + /// error will be logged. + mutating func handle( + _ event: ByteBuffer, + responseWriter: some LambdaResponseStreamWriter, + context: NewLambdaContext + ) async throws +} + +/// A writer object to write the Lambda response stream into. The HTTP response is started lazily. +/// before the first call to ``write(_:)`` or ``writeAndFinish(_:)``. +package protocol LambdaResponseStreamWriter { + /// Write a response part into the stream. Bytes written are streamed continually. + /// - Parameter buffer: The buffer to write. + func write(_ buffer: ByteBuffer) async throws + + /// End the response stream and the underlying HTTP response. + func finish() async throws + + /// Write a response part into the stream and then end the stream as well as the underlying HTTP response. + /// - Parameter buffer: The buffer to write. + func writeAndFinish(_ buffer: ByteBuffer) async throws +} + +/// This handler protocol is intended to serve the most common use-cases. +/// This protocol is completely agnostic to any encoding/decoding -- decoding the received event invocation into an ``Event`` object and encoding the returned ``Output`` object is handled by the library. +/// The``handle(_:context:)`` function simply receives the generic ``Event`` object as input and returns the generic ``Output`` object. +/// +/// - note: This handler protocol does not support response streaming because the output has to be encoded prior to it being sent, e.g. it is not possible to encode a partial/incomplete JSON string. +/// This protocol also does not support the execution of background work after the response has been returned -- the ``LambdaWithBackgroundProcessingHandler`` protocol caters for such use-cases. +package protocol NewLambdaHandler { + /// Generic input type. + /// The body of the request sent to Lambda will be decoded into this type for the handler to consume. + associatedtype Event: Decodable + /// Generic output type. + /// This is the return type of the ``handle(_:context:)`` function. + associatedtype Output + + /// Implement the business logic of the Lambda function here. + /// - Parameters: + /// - event: The generic ``Event`` object representing the invocation's input data. + /// - context: The ``NewLambdaContext`` containing the invocation's metadata. + /// - Returns: A generic ``Output`` object representing the computed result. + func handle(_ event: Event, context: NewLambdaContext) async throws -> Output +} + +/// This protocol is exactly like ``NewLambdaHandler``, with the only difference being the added support for executing background +/// work after the result has been sent to the AWS Lambda control plane. +/// This is achieved by not having a return type in the `handle` function. The output is instead written into a +/// ``LambdaResponseWriter``that is passed in as an argument, meaning that the ``handle(_:)`` function is then free to implement +/// any background work after the result has been sent to the AWS Lambda control plane. +package protocol LambdaWithBackgroundProcessingHandler { + /// Generic input type. + /// The body of the request sent to Lambda will be decoded into this type for the handler to consume. + associatedtype Event: Decodable + /// Generic output type. + /// This is the type that the `handle` function will send through the ``LambdaResponseWriter``. + associatedtype Output + + /// Implement the business logic of the Lambda function here. + /// - Parameters: + /// - event: The generic ``Event`` object representing the invocation's input data. + /// - outputWriter: The writer to send the computed response to. A call to `outputWriter.write(_:)` will return the response to the AWS Lambda response endpoint. + /// Any background work can then be executed before returning. + /// - context: The ``NewLambdaContext`` containing the invocation's metadata. + func handle( + _ event: Event, + outputWriter: some LambdaResponseWriter, + context: NewLambdaContext + ) async throws +} + +/// Used with ``LambdaWithBackgroundProcessingHandler``. +/// A mechanism to "return" an output from ``LambdaWithBackgroundProcessingHandler/handle(_:outputWriter:context:)`` without the function needing to +/// have a return type and exit at that point. This allows for background work to be executed _after_ a response has been sent to the AWS Lambda response endpoint. +package protocol LambdaResponseWriter { + associatedtype Output + /// Sends the generic ``Output`` object (representing the computed result of the handler) + /// to the AWS Lambda response endpoint. + /// This function simply serves as a mechanism to return the computed result from a handler function + /// without an explicit `return`. + func write(_ output: Output) async throws +} + +/// A ``StreamingLambdaHandler`` conforming handler object that can be constructed with a closure. +/// Allows for a handler to be defined in a clean manner, leveraging Swift's trailing closure syntax. +package struct StreamingClosureHandler: StreamingLambdaHandler { + let body: @Sendable (ByteBuffer, LambdaResponseStreamWriter, NewLambdaContext) async throws -> Void + + /// Initialize an instance from a handler function in the form of a closure. + /// - Parameter body: The handler function written as a closure. + package init( + body: @Sendable @escaping (ByteBuffer, LambdaResponseStreamWriter, NewLambdaContext) async throws -> Void + ) { + self.body = body + } + + /// Calls the provided `self.body` closure with the ``ByteBuffer`` invocation event, the ``LambdaResponseStreamWriter``, and the ``NewLambdaContext`` + /// - Parameters: + /// - event: The invocation's input data. + /// - responseWriter: A ``LambdaResponseStreamWriter`` to write the invocation's response to. + /// If no response or error is written to `responseWriter` an error will be reported to the invoker. + /// - context: The ``NewLambdaContext`` containing the invocation's metadata. + package func handle( + _ request: ByteBuffer, + responseWriter: some LambdaResponseStreamWriter, + context: NewLambdaContext + ) async throws { + try await self.body(request, responseWriter, context) + } +} + +/// A ``NewLambdaHandler`` conforming handler object that can be constructed with a closure. +/// Allows for a handler to be defined in a clean manner, leveraging Swift's trailing closure syntax. +package struct ClosureHandler: NewLambdaHandler { + let body: (Event, NewLambdaContext) async throws -> Output + + /// Initialize with a closure handler over generic `Input` and `Output` types. + /// - Parameter body: The handler function written as a closure. + package init(body: @escaping (Event, NewLambdaContext) async throws -> Output) where Output: Encodable { + self.body = body + } + + /// Initialize with a closure handler over a generic `Input` type, and a `Void` `Output`. + /// - Parameter body: The handler function written as a closure. + package init(body: @escaping (Event, NewLambdaContext) async throws -> Void) where Output == Void { + self.body = body + } + + /// Calls the provided `self.body` closure with the generic ``Event`` object representing the incoming event, and the ``NewLambdaContext`` + /// - Parameters: + /// - event: The generic ``Event`` object representing the invocation's input data. + /// - context: The ``NewLambdaContext`` containing the invocation's metadata. + package func handle(_ event: Event, context: NewLambdaContext) async throws -> Output { + try await self.body(event, context) + } +} diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaMockClient.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaMockClient.swift index 4023dc76..15a30223 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/LambdaMockClient.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/LambdaMockClient.swift @@ -17,14 +17,14 @@ import Foundation import Logging import NIOCore -struct LambdaMockWriter: LambdaResponseStreamWriter { +struct LambdaMockWriter: LambdaRuntimeClientResponseStreamWriter { var underlying: LambdaMockClient init(underlying: LambdaMockClient) { self.underlying = underlying } - mutating func write(_ buffer: ByteBuffer) async throws { + func write(_ buffer: ByteBuffer) async throws { try await self.underlying.write(buffer) } diff --git a/Tests/AWSLambdaRuntimeTests/NewLambda+CodableTests.swift b/Tests/AWSLambdaRuntimeTests/NewLambda+CodableTests.swift new file mode 100644 index 00000000..08e55f36 --- /dev/null +++ b/Tests/AWSLambdaRuntimeTests/NewLambda+CodableTests.swift @@ -0,0 +1,100 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import AWSLambdaRuntime +import Logging +import NIOCore +import Testing + +#if canImport(FoundationEssentials) +import FoundationEssentials +#else +import Foundation +#endif + +@Suite +struct JSONTests { + + let logger = Logger(label: "JSONTests") + + struct Foo: Codable { + var bar: String + } + + @Test + func testEncodingConformance() { + let encoder = LambdaJSONOutputEncoder(JSONEncoder()) + let foo = Foo(bar: "baz") + var byteBuffer = ByteBuffer() + + #expect(throws: Never.self) { + try encoder.encode(foo, into: &byteBuffer) + } + + #expect(byteBuffer == ByteBuffer(string: #"{"bar":"baz"}"#)) + } + + @Test + func testJSONHandlerWithOutput() async { + let jsonEncoder = JSONEncoder() + let jsonDecoder = JSONDecoder() + + let closureHandler = ClosureHandler { (foo: Foo, context) in + foo + } + + var handler = LambdaCodableAdapter( + encoder: jsonEncoder, + decoder: jsonDecoder, + handler: LambdaHandlerAdapter(handler: closureHandler) + ) + + let event = ByteBuffer(string: #"{"bar":"baz"}"#) + let writer = MockLambdaWriter() + let context = NewLambdaContext.__forTestsOnly( + requestID: UUID().uuidString, + traceID: UUID().uuidString, + invokedFunctionARN: "arn:", + timeout: .milliseconds(6000), + logger: self.logger + ) + + await #expect(throws: Never.self) { + try await handler.handle(event, responseWriter: writer, context: context) + } + + let result = await writer.output + #expect(result == ByteBuffer(string: #"{"bar":"baz"}"#)) + } +} + +final actor MockLambdaWriter: LambdaResponseStreamWriter { + private var _buffer: ByteBuffer? + + var output: ByteBuffer? { + self._buffer + } + + func writeAndFinish(_ buffer: ByteBuffer) async throws { + self._buffer = buffer + } + + func write(_ buffer: ByteBuffer) async throws { + fatalError("Unexpected call") + } + + func finish() async throws { + fatalError("Unexpected call") + } +} From dd059f19ac5acdeec29bc7e3ed7395198b3591b9 Mon Sep 17 00:00:00 2001 From: Fabian Fett Date: Wed, 4 Sep 2024 15:20:58 +0200 Subject: [PATCH 025/177] Add new `withMockServer` test resource method (#352) --- .../MockLambdaServer.swift | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift b/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift index 14134aad..a0859218 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift @@ -20,6 +20,27 @@ import NIOPosix @testable import AWSLambdaRuntimeCore +func withMockServer( + behaviour: some LambdaServerBehavior, + port: Int = 0, + keepAlive: Bool = true, + _ body: (_ port: Int) async throws -> Result +) async throws -> Result { + let eventLoopGroup = NIOSingletons.posixEventLoopGroup + let server = MockLambdaServer(behavior: behaviour, port: port, keepAlive: keepAlive) + let port = try await server.start().get() + + let result: Swift.Result + do { + result = .success(try await body(port)) + } catch { + result = .failure(error) + } + + try? await server.stop().get() + return try result.get() +} + final class MockLambdaServer { private let logger = Logger(label: "MockLambdaServer") private let behavior: LambdaServerBehavior From 7a8c0f22c0ab30a7e2926636fe30a8b6b0e88396 Mon Sep 17 00:00:00 2001 From: Fabian Fett Date: Wed, 4 Sep 2024 15:57:58 +0200 Subject: [PATCH 026/177] New async runtime client (#348) --- Package.swift | 2 +- .../LambdaRuntimeClient.swift | 14 +- .../NewLambdaRuntimeClient.swift | 801 ++++++++++++++++++ .../NewLambdaRuntimeError.swift | 33 + .../LambdaTest.swift | 4 +- .../MockLambdaServer.swift | 2 +- .../NewLambdaRuntimeClientTests.swift | 89 ++ Tests/AWSLambdaRuntimeCoreTests/Utils.swift | 5 +- 8 files changed, 939 insertions(+), 11 deletions(-) create mode 100644 Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeClient.swift create mode 100644 Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeError.swift create mode 100644 Tests/AWSLambdaRuntimeCoreTests/NewLambdaRuntimeClientTests.swift diff --git a/Package.swift b/Package.swift index 63d83b7b..25cbdd4f 100644 --- a/Package.swift +++ b/Package.swift @@ -23,7 +23,7 @@ let package = Package( .library(name: "AWSLambdaTesting", targets: ["AWSLambdaTesting"]), ], dependencies: [ - .package(url: "https://github.com/apple/swift-nio.git", .upToNextMajor(from: "2.67.0")), + .package(url: "https://github.com/apple/swift-nio.git", .upToNextMajor(from: "2.72.0")), .package(url: "https://github.com/apple/swift-log.git", .upToNextMajor(from: "1.5.4")), .package(url: "https://github.com/apple/swift-docc-plugin.git", from: "1.0.0"), .package(url: "https://github.com/apple/swift-testing.git", branch: "swift-DEVELOPMENT-SNAPSHOT-2024-08-29-a"), diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift index 36f88229..19b56c1f 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift @@ -142,8 +142,14 @@ extension LambdaRuntimeClient { static let defaultHeaders = HTTPHeaders([("user-agent", "Swift-Lambda/Unknown")]) /// These headers must be sent along an invocation or initialization error report - static let errorHeaders = HTTPHeaders([ - ("user-agent", "Swift-Lambda/Unknown"), - ("lambda-runtime-function-error-type", "Unhandled"), - ]) + static let errorHeaders: HTTPHeaders = [ + "user-agent": "Swift-Lambda/Unknown", + "lambda-runtime-function-error-type": "Unhandled", + ] + + /// These headers must be sent along an invocation or initialization error report + static let streamingHeaders: HTTPHeaders = [ + "user-agent": "Swift-Lambda/Unknown", + "transfer-encoding": "streaming", + ] } diff --git a/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeClient.swift b/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeClient.swift new file mode 100644 index 00000000..71839163 --- /dev/null +++ b/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeClient.swift @@ -0,0 +1,801 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import Logging +import NIOCore +import NIOHTTP1 +import NIOPosix + +final actor NewLambdaRuntimeClient: LambdaRuntimeClientProtocol { + nonisolated let unownedExecutor: UnownedSerialExecutor + + struct Configuration { + var ip: String + var port: Int + } + + struct Writer: LambdaRuntimeClientResponseStreamWriter { + private var runtimeClient: NewLambdaRuntimeClient + + fileprivate init(runtimeClient: NewLambdaRuntimeClient) { + self.runtimeClient = runtimeClient + } + + func write(_ buffer: NIOCore.ByteBuffer) async throws { + try await self.runtimeClient.write(buffer) + } + + func finish() async throws { + try await self.runtimeClient.writeAndFinish(nil) + } + + func writeAndFinish(_ buffer: NIOCore.ByteBuffer) async throws { + try await self.runtimeClient.writeAndFinish(buffer) + } + + func reportError(_ error: any Error) async throws { + try await self.runtimeClient.reportError(error) + } + } + + private enum ConnectionState { + case disconnected + case connecting([CheckedContinuation, any Error>]) + case connected(Channel, LambdaChannelHandler) + } + + enum LambdaState { + /// this is the "normal" state. Transitions to `waitingForNextInvocation` + case idle(previousRequestID: String?) + /// this is the state while we wait for an invocation. A next call is running. + /// Transitions to `waitingForResponse` + case waitingForNextInvocation + /// The invocation was forwarded to the handler and we wait for a response. + /// Transitions to `sendingResponse` or `sentResponse`. + case waitingForResponse(requestID: String) + case sendingResponse(requestID: String) + case sentResponse(requestID: String) + } + + enum ClosingState { + case notClosing + case closing(CheckedContinuation) + case closed + } + + private let eventLoop: any EventLoop + private let logger: Logger + private let configuration: Configuration + + private var connectionState: ConnectionState = .disconnected + private var lambdaState: LambdaState = .idle(previousRequestID: nil) + private var closingState: ClosingState = .notClosing + + // connections that are currently being closed. In the `run` method we must await all of them + // being fully closed before we can return from it. + private var closingConnections: [any Channel] = [] + + static func withRuntimeClient( + configuration: Configuration, + eventLoop: any EventLoop, + logger: Logger, + _ body: (NewLambdaRuntimeClient) async throws -> Result + ) async throws -> Result { + let runtime = NewLambdaRuntimeClient(configuration: configuration, eventLoop: eventLoop, logger: logger) + let result: Swift.Result + do { + result = .success(try await body(runtime)) + } catch { + result = .failure(error) + } + + await runtime.close() + + //try? await runtime.close() + return try result.get() + } + + private init(configuration: Configuration, eventLoop: any EventLoop, logger: Logger) { + self.unownedExecutor = eventLoop.executor.asUnownedSerialExecutor() + self.configuration = configuration + self.eventLoop = eventLoop + self.logger = logger + } + + private func close() async { + self.logger.trace("Close lambda runtime client") + + guard case .notClosing = self.closingState else { + return + } + await withCheckedContinuation { continuation in + self.closingState = .closing(continuation) + + switch self.connectionState { + case .disconnected: + if self.closingConnections.isEmpty { + return continuation.resume() + } + + case .connecting(let continuations): + for continuation in continuations { + continuation.resume(throwing: NewLambdaRuntimeError(code: .closingRuntimeClient)) + } + self.connectionState = .connecting([]) + + case .connected(let channel, _): + channel.close(mode: .all, promise: nil) + } + } + } + + func nextInvocation() async throws -> (Invocation, Writer) { + switch self.lambdaState { + case .idle: + self.lambdaState = .waitingForNextInvocation + let handler = try await self.makeOrGetConnection() + let invocation = try await handler.nextInvocation() + guard case .waitingForNextInvocation = self.lambdaState else { + fatalError("Invalid state: \(self.lambdaState)") + } + self.lambdaState = .waitingForResponse(requestID: invocation.metadata.requestID) + return (invocation, Writer(runtimeClient: self)) + + case .waitingForNextInvocation, + .waitingForResponse, + .sendingResponse, + .sentResponse: + fatalError("Invalid state: \(self.lambdaState)") + } + + } + + private func write(_ buffer: NIOCore.ByteBuffer) async throws { + switch self.lambdaState { + case .idle, .sentResponse: + throw NewLambdaRuntimeError(code: .writeAfterFinishHasBeenSent) + + case .waitingForNextInvocation: + fatalError("Invalid state: \(self.lambdaState)") + + case .waitingForResponse(let requestID): + self.lambdaState = .sendingResponse(requestID: requestID) + fallthrough + + case .sendingResponse(let requestID): + let handler = try await self.makeOrGetConnection() + guard case .sendingResponse(requestID) = self.lambdaState else { + fatalError("Invalid state: \(self.lambdaState)") + } + return try await handler.writeResponseBodyPart(buffer, requestID: requestID) + } + } + + private func writeAndFinish(_ buffer: NIOCore.ByteBuffer?) async throws { + switch self.lambdaState { + case .idle, .sentResponse: + throw NewLambdaRuntimeError(code: .finishAfterFinishHasBeenSent) + + case .waitingForNextInvocation: + fatalError("Invalid state: \(self.lambdaState)") + + case .waitingForResponse(let requestID): + fallthrough + + case .sendingResponse(let requestID): + self.lambdaState = .sentResponse(requestID: requestID) + let handler = try await self.makeOrGetConnection() + guard case .sentResponse(requestID) = self.lambdaState else { + fatalError("Invalid state: \(self.lambdaState)") + } + try await handler.finishResponseRequest(finalData: buffer, requestID: requestID) + guard case .sentResponse(requestID) = self.lambdaState else { + fatalError("Invalid state: \(self.lambdaState)") + } + self.lambdaState = .idle(previousRequestID: requestID) + } + } + + private func reportError(_ error: any Error) async throws { + switch self.lambdaState { + case .idle, .waitingForNextInvocation, .sentResponse: + fatalError("Invalid state: \(self.lambdaState)") + + case .waitingForResponse(let requestID): + fallthrough + + case .sendingResponse(let requestID): + self.lambdaState = .sentResponse(requestID: requestID) + let handler = try await self.makeOrGetConnection() + guard case .sentResponse(requestID) = self.lambdaState else { + fatalError("Invalid state: \(self.lambdaState)") + } + try await handler.reportError(error, requestID: requestID) + guard case .sentResponse(requestID) = self.lambdaState else { + fatalError("Invalid state: \(self.lambdaState)") + } + self.lambdaState = .idle(previousRequestID: requestID) + } + } + + private func channelClosed(_ channel: any Channel) { + switch (self.connectionState, self.closingState) { + case (_, .closed): + fatalError("Invalid state: \(self.connectionState), \(self.closingState)") + + case (.disconnected, .notClosing): + if let index = self.closingConnections.firstIndex(where: { $0 === channel }) { + self.closingConnections.remove(at: index) + } + + case (.disconnected, .closing(let continuation)): + if let index = self.closingConnections.firstIndex(where: { $0 === channel }) { + self.closingConnections.remove(at: index) + } + + if self.closingConnections.isEmpty { + self.closingState = .closed + continuation.resume() + } + + case (.connecting(let array), .notClosing): + self.connectionState = .disconnected + for continuation in array { + continuation.resume(throwing: NewLambdaRuntimeError(code: .lostConnectionToControlPlane)) + } + + case (.connecting(let array), .closing(let continuation)): + self.connectionState = .disconnected + precondition(array.isEmpty, "If we are closing we should have failed all connection attempts already") + if self.closingConnections.isEmpty { + self.closingState = .closed + continuation.resume() + } + + case (.connected, .notClosing): + self.connectionState = .disconnected + + case (.connected, .closing(let continuation)): + self.connectionState = .disconnected + + if self.closingConnections.isEmpty { + self.closingState = .closed + continuation.resume() + } + } + } + + private func makeOrGetConnection() async throws -> LambdaChannelHandler { + switch self.connectionState { + case .disconnected: + self.connectionState = .connecting([]) + break + case .connecting(var array): + // Since we do get sequential invocations this case normally should never be hit. + // We'll support it anyway. + return try await withCheckedThrowingContinuation { + (continuation: CheckedContinuation, any Error>) in + array.append(continuation) + self.connectionState = .connecting(array) + } + case .connected(_, let handler): + return handler + } + + let bootstrap = ClientBootstrap(group: self.eventLoop) + .channelInitializer { channel in + do { + try channel.pipeline.syncOperations.addHTTPClientHandlers() + // Lambda quotas... An invocation payload is maximal 6MB in size: + // https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html + try channel.pipeline.syncOperations.addHandler( + NIOHTTPClientResponseAggregator(maxContentLength: 6 * 1024 * 1024) + ) + try channel.pipeline.syncOperations.addHandler( + LambdaChannelHandler(delegate: self, logger: self.logger) + ) + return channel.eventLoop.makeSucceededFuture(()) + } catch { + return channel.eventLoop.makeFailedFuture(error) + } + } + .connectTimeout(.seconds(2)) + + do { + // connect directly via socket address to avoid happy eyeballs (perf) + let address = try SocketAddress(ipAddress: self.configuration.ip, port: self.configuration.port) + let channel = try await bootstrap.connect(to: address).get() + let handler = try channel.pipeline.syncOperations.handler( + type: LambdaChannelHandler.self + ) + self.logger.trace( + "Connection to control plane created", + metadata: [ + "lambda_port": "\(self.configuration.port)", + "lambda_ip": "\(self.configuration.ip)", + ] + ) + channel.closeFuture.whenComplete { result in + self.assumeIsolated { runtimeClient in + runtimeClient.channelClosed(channel) + } + } + + switch self.connectionState { + case .disconnected, .connected: + fatalError("Unexpected state: \(self.connectionState)") + + case .connecting(let array): + self.connectionState = .connected(channel, handler) + defer { + for continuation in array { + continuation.resume(returning: handler) + } + } + return handler + } + } catch { + switch self.connectionState { + case .disconnected, .connected: + fatalError("Unexpected state: \(self.connectionState)") + + case .connecting(let array): + self.connectionState = .disconnected + defer { + for continuation in array { + continuation.resume(throwing: error) + } + } + throw error + } + } + } +} + +extension NewLambdaRuntimeClient: LambdaChannelHandlerDelegate { + nonisolated func connectionErrorHappened(_ error: any Error, channel: any Channel) { + + } + + nonisolated func connectionWillClose(channel: any Channel) { + self.assumeIsolated { isolated in + switch isolated.connectionState { + case .disconnected: + // this case should never happen. But whatever + if channel.isActive { + isolated.closingConnections.append(channel) + } + + case .connecting(let continuations): + // this case should never happen. But whatever + if channel.isActive { + isolated.closingConnections.append(channel) + } + + for continuation in continuations { + continuation.resume(throwing: NewLambdaRuntimeError(code: .connectionToControlPlaneLost)) + } + + case .connected(let stateChannel, _): + guard channel === stateChannel else { + isolated.closingConnections.append(channel) + return + } + + isolated.connectionState = .disconnected + + } + } + + } +} + +private protocol LambdaChannelHandlerDelegate { + func connectionWillClose(channel: any Channel) + func connectionErrorHappened(_ error: any Error, channel: any Channel) +} + +private final class LambdaChannelHandler { + let nextInvocationPath = Consts.invocationURLPrefix + Consts.getNextInvocationURLSuffix + + enum State { + case disconnected + case connected(ChannelHandlerContext, LambdaState) + case closing + + enum LambdaState { + /// this is the "normal" state. Transitions to `waitingForNextInvocation` + case idle + /// this is the state while we wait for an invocation. A next call is running. + /// Transitions to `waitingForResponse` + case waitingForNextInvocation(CheckedContinuation) + /// The invocation was forwarded to the handler and we wait for a response. + /// Transitions to `sendingResponse` or `sentResponse`. + case waitingForResponse + case sendingResponse + case sentResponse(CheckedContinuation) + } + } + + private var state: State = .disconnected + private var lastError: Error? + private var reusableErrorBuffer: ByteBuffer? + private let logger: Logger + private let delegate: Delegate + + init(delegate: Delegate, logger: Logger) { + self.delegate = delegate + self.logger = logger + } + + func nextInvocation(isolation: isolated (any Actor)? = #isolation) async throws -> Invocation { + switch self.state { + case .connected(let context, .idle): + return try await withCheckedThrowingContinuation { + (continuation: CheckedContinuation) in + self.state = .connected(context, .waitingForNextInvocation(continuation)) + self.sendNextRequest(context: context) + } + + case .connected(_, .sendingResponse), + .connected(_, .sentResponse), + .connected(_, .waitingForNextInvocation), + .connected(_, .waitingForResponse), + .closing: + fatalError("Invalid state: \(self.state)") + + case .disconnected: + throw NewLambdaRuntimeError(code: .connectionToControlPlaneLost) + } + } + + func reportError( + isolation: isolated (any Actor)? = #isolation, + _ error: any Error, + requestID: String + ) async throws { + switch self.state { + case .connected(_, .waitingForNextInvocation): + fatalError("Invalid state: \(self.state)") + + case .connected(let context, .waitingForResponse): + try await withCheckedThrowingContinuation { (continuation: CheckedContinuation) in + self.state = .connected(context, .sentResponse(continuation)) + self.sendReportErrorRequest(requestID: requestID, error: error, context: context) + } + + case .connected(let context, .sendingResponse): + try await withCheckedThrowingContinuation { (continuation: CheckedContinuation) in + self.state = .connected(context, .sentResponse(continuation)) + self.sendResponseStreamingFailure(error: error, context: context) + } + + case .connected(_, .idle), + .connected(_, .sentResponse): + // The final response has already been sent. The only way to report the unhandled error + // now is to log it. Normally this library never logs higher than debug, we make an + // exception here, as there is no other way of reporting the error otherwise. + self.logger.error( + "Unhandled error after stream has finished", + metadata: [ + "lambda_request_id": "\(requestID)", + "lambda_error": "\(String(describing: error))", + ] + ) + + case .disconnected: + throw NewLambdaRuntimeError(code: .connectionToControlPlaneLost) + + case .closing: + throw NewLambdaRuntimeError(code: .connectionToControlPlaneGoingAway) + } + } + + func writeResponseBodyPart( + isolation: isolated (any Actor)? = #isolation, + _ byteBuffer: ByteBuffer, + requestID: String + ) async throws { + switch self.state { + case .connected(_, .waitingForNextInvocation): + fatalError("Invalid state: \(self.state)") + + case .connected(let context, .waitingForResponse): + self.state = .connected(context, .sendingResponse) + try await self.sendResponseBodyPart(byteBuffer, sendHeadWithRequestID: requestID, context: context) + + case .connected(let context, .sendingResponse): + try await self.sendResponseBodyPart(byteBuffer, sendHeadWithRequestID: nil, context: context) + + case .connected(_, .idle), + .connected(_, .sentResponse): + throw NewLambdaRuntimeError(code: .writeAfterFinishHasBeenSent) + + case .disconnected: + throw NewLambdaRuntimeError(code: .connectionToControlPlaneLost) + + case .closing: + throw NewLambdaRuntimeError(code: .connectionToControlPlaneGoingAway) + } + } + + func finishResponseRequest( + isolation: isolated (any Actor)? = #isolation, + finalData: ByteBuffer?, + requestID: String + ) async throws { + switch self.state { + case .connected(_, .idle), + .connected(_, .waitingForNextInvocation): + fatalError("Invalid state: \(self.state)") + + case .connected(let context, .waitingForResponse): + try await withCheckedThrowingContinuation { (continuation: CheckedContinuation) in + self.state = .connected(context, .sentResponse(continuation)) + self.sendResponseFinish(finalData, sendHeadWithRequestID: requestID, context: context) + } + + case .connected(let context, .sendingResponse): + try await withCheckedThrowingContinuation { (continuation: CheckedContinuation) in + self.state = .connected(context, .sentResponse(continuation)) + self.sendResponseFinish(finalData, sendHeadWithRequestID: nil, context: context) + } + + case .connected(_, .sentResponse): + throw NewLambdaRuntimeError(code: .finishAfterFinishHasBeenSent) + + case .disconnected: + throw NewLambdaRuntimeError(code: .connectionToControlPlaneLost) + + case .closing: + throw NewLambdaRuntimeError(code: .connectionToControlPlaneGoingAway) + } + } + + private func sendResponseBodyPart( + isolation: isolated (any Actor)? = #isolation, + _ byteBuffer: ByteBuffer, + sendHeadWithRequestID: String?, + context: ChannelHandlerContext + ) async throws { + + if let requestID = sendHeadWithRequestID { + // TODO: This feels super expensive. We should be able to make this cheaper. requestIDs are fixed length + let url = Consts.invocationURLPrefix + "/" + requestID + Consts.postResponseURLSuffix + + let httpRequest = HTTPRequestHead( + version: .http1_1, + method: .POST, + uri: url, + headers: LambdaRuntimeClient.streamingHeaders + ) + + context.write(self.wrapOutboundOut(.head(httpRequest)), promise: nil) + } + + let future = context.write(self.wrapOutboundOut(.body(.byteBuffer(byteBuffer)))) + context.flush() + try await future.get() + } + + private func sendResponseFinish( + isolation: isolated (any Actor)? = #isolation, + _ byteBuffer: ByteBuffer?, + sendHeadWithRequestID: String?, + context: ChannelHandlerContext + ) { + if let requestID = sendHeadWithRequestID { + // TODO: This feels quite expensive. We should be able to make this cheaper. requestIDs are fixed length + let url = "\(Consts.invocationURLPrefix)/\(requestID)\(Consts.postResponseURLSuffix)" + + // If we have less than 6MB, we don't want to use the streaming API. If we have more + // than 6MB we must use the streaming mode. + let headers: HTTPHeaders = + if byteBuffer?.readableBytes ?? 0 < 6_000_000 { + [ + "user-agent": "Swift-Lambda/Unknown", + "content-length": "\(byteBuffer?.readableBytes ?? 0)", + ] + } else { + LambdaRuntimeClient.streamingHeaders + } + + let httpRequest = HTTPRequestHead( + version: .http1_1, + method: .POST, + uri: url, + headers: headers + ) + + context.write(self.wrapOutboundOut(.head(httpRequest)), promise: nil) + } + + if let byteBuffer { + context.write(self.wrapOutboundOut(.body(.byteBuffer(byteBuffer))), promise: nil) + } + + context.write(self.wrapOutboundOut(.end(nil)), promise: nil) + context.flush() + } + + private func sendNextRequest(context: ChannelHandlerContext) { + let httpRequest = HTTPRequestHead( + version: .http1_1, + method: .GET, + uri: self.nextInvocationPath, + headers: LambdaRuntimeClient.defaultHeaders + ) + + context.write(self.wrapOutboundOut(.head(httpRequest)), promise: nil) + context.write(self.wrapOutboundOut(.end(nil)), promise: nil) + context.flush() + } + + private func sendReportErrorRequest(requestID: String, error: any Error, context: ChannelHandlerContext) { + // TODO: This feels quite expensive. We should be able to make this cheaper. requestIDs are fixed length + let url = "\(Consts.invocationURLPrefix)/\(requestID)\(Consts.postErrorURLSuffix)" + + let httpRequest = HTTPRequestHead( + version: .http1_1, + method: .POST, + uri: url, + headers: LambdaRuntimeClient.errorHeaders + ) + + if self.reusableErrorBuffer == nil { + self.reusableErrorBuffer = context.channel.allocator.buffer(capacity: 1024) + } else { + self.reusableErrorBuffer!.clear() + } + + let errorResponse = ErrorResponse(errorType: Consts.functionError, errorMessage: "\(error)") + // TODO: Write this directly into our ByteBuffer + let bytes = errorResponse.toJSONBytes() + self.reusableErrorBuffer!.writeBytes(bytes) + + context.write(self.wrapOutboundOut(.head(httpRequest)), promise: nil) + context.write(self.wrapOutboundOut(.body(.byteBuffer(self.reusableErrorBuffer!))), promise: nil) + context.write(self.wrapOutboundOut(.end(nil)), promise: nil) + context.flush() + } + + private func sendResponseStreamingFailure(error: any Error, context: ChannelHandlerContext) { + // TODO: Use base64 here + let trailers: HTTPHeaders = [ + "Lambda-Runtime-Function-Error-Type": "Unhandled", + "Lambda-Runtime-Function-Error-Body": "Requires base64", + ] + + context.write(self.wrapOutboundOut(.end(trailers)), promise: nil) + context.flush() + } + + func cancelCurrentRequestAndCloseConnection() { + fatalError("Unimplemented") + } +} + +extension LambdaChannelHandler: ChannelInboundHandler { + typealias OutboundIn = Never + typealias InboundIn = NIOHTTPClientResponseFull + typealias OutboundOut = HTTPClientRequestPart + + func handlerAdded(context: ChannelHandlerContext) { + if context.channel.isActive { + self.state = .connected(context, .idle) + } + } + + func channelActive(context: ChannelHandlerContext) { + switch self.state { + case .disconnected: + self.state = .connected(context, .idle) + case .connected: + break + case .closing: + fatalError("Invalid state: \(self.state)") + } + } + + func channelRead(context: ChannelHandlerContext, data: NIOAny) { + let response = unwrapInboundIn(data) + + // handle response content + + switch self.state { + case .connected(let context, .waitingForNextInvocation(let continuation)): + do { + let metadata = try InvocationMetadata(headers: response.head.headers) + self.state = .connected(context, .waitingForResponse) + continuation.resume(returning: Invocation(metadata: metadata, event: response.body ?? ByteBuffer())) + } catch { + self.state = .closing + + self.delegate.connectionWillClose(channel: context.channel) + context.close(promise: nil) + continuation.resume( + throwing: NewLambdaRuntimeError(code: .invocationMissingMetadata, underlying: error) + ) + } + + case .connected(let context, .sentResponse(let continuation)): + if response.head.status == .accepted { + self.state = .connected(context, .idle) + continuation.resume() + } else { + self.state = .connected(context, .idle) + continuation.resume(throwing: NewLambdaRuntimeError(code: .unexpectedStatusCodeForRequest)) + } + + case .disconnected, .closing, .connected(_, _): + break + } + + // As defined in RFC 7230 Section 6.3: + // HTTP/1.1 defaults to the use of "persistent connections", allowing + // multiple requests and responses to be carried over a single + // connection. The "close" connection option is used to signal that a + // connection will not persist after the current request/response. HTTP + // implementations SHOULD support persistent connections. + // + // That's why we only assume the connection shall be closed if we receive + // a "connection = close" header. + let serverCloseConnection = + response.head.headers["connection"].contains(where: { $0.lowercased() == "close" }) + + let closeConnection = serverCloseConnection || response.head.version != .http1_1 + + if closeConnection { + // If we were succeeding the request promise here directly and closing the connection + // after succeeding the promise we may run into a race condition: + // + // The lambda runtime will ask for the next work item directly after a succeeded post + // response request. The desire for the next work item might be faster than the attempt + // to close the connection. This will lead to a situation where we try to the connection + // but the next request has already been scheduled on the connection that we want to + // close. For this reason we postpone succeeding the promise until the connection has + // been closed. This codepath will only be hit in the very, very unlikely event of the + // Lambda control plane demanding to close connection. (It's more or less only + // implemented to support http1.1 correctly.) This behavior is ensured with the test + // `LambdaTest.testNoKeepAliveServer`. + self.state = .closing + self.delegate.connectionWillClose(channel: context.channel) + context.close(promise: nil) + } + } + + func errorCaught(context: ChannelHandlerContext, error: Error) { + self.logger.trace( + "Channel error caught", + metadata: [ + "error": "\(error)" + ] + ) + // pending responses will fail with lastError in channelInactive since we are calling context.close + self.delegate.connectionErrorHappened(error, channel: context.channel) + + self.lastError = error + context.channel.close(promise: nil) + } + + func channelInactive(context: ChannelHandlerContext) { + // fail any pending responses with last error or assume peer disconnected + + // we don't need to forward channelInactive to the delegate, as the delegate observes the + // closeFuture + context.fireChannelInactive() + } +} + +private struct RequestCancelEvent {} diff --git a/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeError.swift b/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeError.swift new file mode 100644 index 00000000..b95a5587 --- /dev/null +++ b/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeError.swift @@ -0,0 +1,33 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +struct NewLambdaRuntimeError: Error { + enum Code { + case closingRuntimeClient + + case connectionToControlPlaneLost + case connectionToControlPlaneGoingAway + case invocationMissingMetadata + + case writeAfterFinishHasBeenSent + case finishAfterFinishHasBeenSent + case lostConnectionToControlPlane + case unexpectedStatusCodeForRequest + + } + + var code: Code + var underlying: (any Error)? + +} diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaTest.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaTest.swift index 9379f5ee..3eb15fab 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/LambdaTest.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/LambdaTest.swift @@ -222,7 +222,7 @@ class LambdaTest: XCTestCase { cognitoIdentity: nil, clientContext: nil, logger: Logger(label: "test"), - eventLoop: MultiThreadedEventLoopGroup(numberOfThreads: 1).next(), + eventLoop: NIOSingletons.posixEventLoopGroup.next(), allocator: ByteBufferAllocator() ) XCTAssertGreaterThan(context.deadline, .now()) @@ -250,7 +250,7 @@ class LambdaTest: XCTestCase { cognitoIdentity: nil, clientContext: nil, logger: Logger(label: "test"), - eventLoop: MultiThreadedEventLoopGroup(numberOfThreads: 1).next(), + eventLoop: NIOSingletons.posixEventLoopGroup.next(), allocator: ByteBufferAllocator() ) XCTAssertLessThanOrEqual(context.getRemainingTime(), .seconds(1)) diff --git a/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift b/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift index a0859218..1d56da69 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift @@ -53,7 +53,7 @@ final class MockLambdaServer { private var shutdown = false init(behavior: LambdaServerBehavior, host: String = "127.0.0.1", port: Int = 7000, keepAlive: Bool = true) { - self.group = MultiThreadedEventLoopGroup(numberOfThreads: 1) + self.group = NIOSingletons.posixEventLoopGroup self.behavior = behavior self.host = host self.port = port diff --git a/Tests/AWSLambdaRuntimeCoreTests/NewLambdaRuntimeClientTests.swift b/Tests/AWSLambdaRuntimeCoreTests/NewLambdaRuntimeClientTests.swift new file mode 100644 index 00000000..023c13a0 --- /dev/null +++ b/Tests/AWSLambdaRuntimeCoreTests/NewLambdaRuntimeClientTests.swift @@ -0,0 +1,89 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import Logging +import NIOCore +import NIOPosix +import Testing + +import struct Foundation.UUID + +@testable import AWSLambdaRuntimeCore + +@Suite +struct NewLambdaRuntimeClientTests { + + let logger = { + var logger = Logger(label: "NewLambdaClientRuntimeTest") + logger.logLevel = .trace + return logger + }() + + @Test + func testSimpleInvocations() async throws { + struct HappyBehavior: LambdaServerBehavior { + let requestId = UUID().uuidString + let event = "hello" + + func getInvocation() -> GetInvocationResult { + .success((self.requestId, self.event)) + } + + func processResponse(requestId: String, response: String?) -> Result { + #expect(self.requestId == requestId) + #expect(self.event == response) + return .success(()) + } + + func processError(requestId: String, error: ErrorResponse) -> Result { + Issue.record("should not report error") + return .failure(.internalServerError) + } + + func processInitError(error: ErrorResponse) -> Result { + Issue.record("should not report init error") + return .failure(.internalServerError) + } + } + + try await withMockServer(behaviour: HappyBehavior()) { port in + let configuration = NewLambdaRuntimeClient.Configuration(ip: "127.0.0.1", port: port) + + try await NewLambdaRuntimeClient.withRuntimeClient( + configuration: configuration, + eventLoop: NIOSingletons.posixEventLoopGroup.next(), + logger: self.logger + ) { runtimeClient in + do { + let (invocation, writer) = try await runtimeClient.nextInvocation() + let expected = ByteBuffer(string: "hello") + #expect(invocation.event == expected) + try await writer.writeAndFinish(expected) + } + + do { + let (invocation, writer) = try await runtimeClient.nextInvocation() + let expected = ByteBuffer(string: "hello") + #expect(invocation.event == expected) + try await writer.write(ByteBuffer(string: "h")) + try await writer.write(ByteBuffer(string: "e")) + try await writer.write(ByteBuffer(string: "l")) + try await writer.write(ByteBuffer(string: "l")) + try await writer.write(ByteBuffer(string: "o")) + try await writer.finish() + } + } + } + } +} diff --git a/Tests/AWSLambdaRuntimeCoreTests/Utils.swift b/Tests/AWSLambdaRuntimeCoreTests/Utils.swift index 8bbd4730..41a2552f 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/Utils.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/Utils.swift @@ -62,7 +62,7 @@ func runLambda( behavior: LambdaServerBehavior, handlerProvider: @escaping (LambdaInitializationContext) async throws -> Handler ) throws { - let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) + let eventLoopGroup = NIOSingletons.posixEventLoopGroup.next() try runLambda( behavior: behavior, handlerProvider: { context in @@ -79,8 +79,7 @@ func runLambda( behavior: LambdaServerBehavior, handlerProvider: @escaping (LambdaInitializationContext) -> EventLoopFuture ) throws { - let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) - defer { XCTAssertNoThrow(try eventLoopGroup.syncShutdownGracefully()) } + let eventLoopGroup = NIOSingletons.posixEventLoopGroup.next() let logger = Logger(label: "TestLogger") let server = MockLambdaServer(behavior: behavior, port: 0) let port = try server.start().wait() From ddb703946c2963e87328a31bfba402de216eaddd Mon Sep 17 00:00:00 2001 From: Fabian Fett Date: Wed, 4 Sep 2024 18:28:53 +0200 Subject: [PATCH 027/177] Remove old API (#355) --- Package.swift | 9 +- .../AWSLambdaRuntime/Context+Foundation.swift | 2 +- Sources/AWSLambdaRuntime/Lambda+Codable.swift | 119 ----- .../ControlPlaneRequest.swift | 8 +- .../AWSLambdaRuntimeCore/DetachedTasks.swift | 94 ---- Sources/AWSLambdaRuntimeCore/HTTPClient.swift | 342 ------------- .../Lambda+LocalServer.swift | 9 +- .../AWSLambdaRuntimeCore/Lambda+String.swift | 77 --- Sources/AWSLambdaRuntimeCore/Lambda.swift | 145 +----- .../LambdaConfiguration.swift | 89 ---- .../AWSLambdaRuntimeCore/LambdaContext.swift | 242 --------- .../AWSLambdaRuntimeCore/LambdaHandler.swift | 462 ------------------ .../AWSLambdaRuntimeCore/LambdaRunner.swift | 192 -------- .../AWSLambdaRuntimeCore/LambdaRuntime.swift | 352 ------------- .../LambdaRuntimeClient.swift | 155 ------ .../NewLambdaRuntimeClient.swift | 27 +- .../NewLambdaRuntimeError.swift | 17 +- Sources/AWSLambdaRuntimeCore/Terminator.swift | 148 ------ Sources/AWSLambdaTesting/Lambda+Testing.swift | 131 ----- .../AWSLambdaTesting/LambdaTestRuntime.swift | 17 + .../DetachedTasksTests.swift | 80 --- .../LambdaHandlerTest.swift | 352 ------------- .../LambdaHandlers.swift | 52 -- .../LambdaRunnerTest.swift | 217 -------- .../LambdaRuntimeClientTest.swift | 380 -------------- .../LambdaRuntimeTest.swift | 158 ------ .../LambdaTest.swift | 382 --------------- Tests/AWSLambdaRuntimeCoreTests/Utils.swift | 147 +----- .../Lambda+CodableTest.swift | 251 ---------- .../LambdaTestRuntimeTests.swift | 18 + Tests/AWSLambdaTestingTests/Tests.swift | 102 ---- 31 files changed, 87 insertions(+), 4689 deletions(-) delete mode 100644 Sources/AWSLambdaRuntimeCore/DetachedTasks.swift delete mode 100644 Sources/AWSLambdaRuntimeCore/HTTPClient.swift delete mode 100644 Sources/AWSLambdaRuntimeCore/Lambda+String.swift delete mode 100644 Sources/AWSLambdaRuntimeCore/LambdaConfiguration.swift delete mode 100644 Sources/AWSLambdaRuntimeCore/LambdaContext.swift delete mode 100644 Sources/AWSLambdaRuntimeCore/LambdaHandler.swift delete mode 100644 Sources/AWSLambdaRuntimeCore/LambdaRunner.swift delete mode 100644 Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift delete mode 100644 Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift delete mode 100644 Sources/AWSLambdaRuntimeCore/Terminator.swift delete mode 100644 Sources/AWSLambdaTesting/Lambda+Testing.swift create mode 100644 Sources/AWSLambdaTesting/LambdaTestRuntime.swift delete mode 100644 Tests/AWSLambdaRuntimeCoreTests/DetachedTasksTests.swift delete mode 100644 Tests/AWSLambdaRuntimeCoreTests/LambdaHandlerTest.swift delete mode 100644 Tests/AWSLambdaRuntimeCoreTests/LambdaHandlers.swift delete mode 100644 Tests/AWSLambdaRuntimeCoreTests/LambdaRunnerTest.swift delete mode 100644 Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeClientTest.swift delete mode 100644 Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeTest.swift delete mode 100644 Tests/AWSLambdaRuntimeCoreTests/LambdaTest.swift delete mode 100644 Tests/AWSLambdaRuntimeTests/Lambda+CodableTest.swift create mode 100644 Tests/AWSLambdaTestingTests/LambdaTestRuntimeTests.swift delete mode 100644 Tests/AWSLambdaTestingTests/Tests.swift diff --git a/Package.swift b/Package.swift index 25cbdd4f..4253949d 100644 --- a/Package.swift +++ b/Package.swift @@ -84,13 +84,14 @@ let package = Package( dependencies: [ .byName(name: "AWSLambdaRuntime"), .product(name: "NIO", package: "swift-nio"), - ], - swiftSettings: [.swiftLanguageMode(.v5)] + ] ), .testTarget( name: "AWSLambdaTestingTests", - dependencies: ["AWSLambdaTesting"], - swiftSettings: [.swiftLanguageMode(.v5)] + dependencies: [ + .byName(name: "AWSLambdaTesting"), + .product(name: "Testing", package: "swift-testing"), + ] ), // for perf testing .executableTarget( diff --git a/Sources/AWSLambdaRuntime/Context+Foundation.swift b/Sources/AWSLambdaRuntime/Context+Foundation.swift index a83237a7..f2fa9a75 100644 --- a/Sources/AWSLambdaRuntime/Context+Foundation.swift +++ b/Sources/AWSLambdaRuntime/Context+Foundation.swift @@ -16,7 +16,7 @@ import AWSLambdaRuntimeCore import struct Foundation.Date -extension LambdaContext { +extension NewLambdaContext { var deadlineDate: Date { let secondsSinceEpoch = Double(Int64(bitPattern: self.deadline.rawValue)) / -1_000_000_000 return Date(timeIntervalSince1970: secondsSinceEpoch) diff --git a/Sources/AWSLambdaRuntime/Lambda+Codable.swift b/Sources/AWSLambdaRuntime/Lambda+Codable.swift index fedd85c9..c345e553 100644 --- a/Sources/AWSLambdaRuntime/Lambda+Codable.swift +++ b/Sources/AWSLambdaRuntime/Lambda+Codable.swift @@ -24,125 +24,6 @@ import class Foundation.JSONDecoder import class Foundation.JSONEncoder #endif -// MARK: - SimpleLambdaHandler Codable support - -/// Implementation of `ByteBuffer` to `Event` decoding. -extension SimpleLambdaHandler where Event: Decodable { - @inlinable - public func decode(buffer: ByteBuffer) throws -> Event { - try self.decoder.decode(Event.self, from: buffer) - } -} - -/// Implementation of `Output` to `ByteBuffer` encoding. -extension SimpleLambdaHandler where Output: Encodable { - @inlinable - public func encode(value: Output, into buffer: inout ByteBuffer) throws { - try self.encoder.encode(value, into: &buffer) - } -} - -/// Default `ByteBuffer` to `Event` decoder using Foundation's `JSONDecoder`. -/// Advanced users who want to inject their own codec can do it by overriding these functions. -extension SimpleLambdaHandler where Event: Decodable { - public var decoder: LambdaCodableDecoder { - Lambda.defaultJSONDecoder - } -} - -/// Default `Output` to `ByteBuffer` encoder using Foundation's `JSONEncoder`. -/// Advanced users who want to inject their own codec can do it by overriding these functions. -extension SimpleLambdaHandler where Output: Encodable { - public var encoder: LambdaCodableEncoder { - Lambda.defaultJSONEncoder - } -} - -// MARK: - LambdaHandler Codable support - -/// Implementation of `ByteBuffer` to `Event` decoding. -extension LambdaHandler where Event: Decodable { - @inlinable - public func decode(buffer: ByteBuffer) throws -> Event { - try self.decoder.decode(Event.self, from: buffer) - } -} - -/// Implementation of `Output` to `ByteBuffer` encoding. -extension LambdaHandler where Output: Encodable { - @inlinable - public func encode(value: Output, into buffer: inout ByteBuffer) throws { - try self.encoder.encode(value, into: &buffer) - } -} - -/// Default `ByteBuffer` to `Event` decoder using Foundation's `JSONDecoder`. -/// Advanced users who want to inject their own codec can do it by overriding these functions. -extension LambdaHandler where Event: Decodable { - public var decoder: LambdaCodableDecoder { - Lambda.defaultJSONDecoder - } -} - -/// Default `Output` to `ByteBuffer` encoder using Foundation's `JSONEncoder`. -/// Advanced users who want to inject their own codec can do it by overriding these functions. -extension LambdaHandler where Output: Encodable { - public var encoder: LambdaCodableEncoder { - Lambda.defaultJSONEncoder - } -} - -// MARK: - EventLoopLambdaHandler Codable support - -/// Implementation of `ByteBuffer` to `Event` decoding. -extension EventLoopLambdaHandler where Event: Decodable { - @inlinable - public func decode(buffer: ByteBuffer) throws -> Event { - try self.decoder.decode(Event.self, from: buffer) - } -} - -/// Implementation of `Output` to `ByteBuffer` encoding. -extension EventLoopLambdaHandler where Output: Encodable { - @inlinable - public func encode(value: Output, into buffer: inout ByteBuffer) throws { - try self.encoder.encode(value, into: &buffer) - } -} - -/// Default `ByteBuffer` to `Event` decoder using Foundation's `JSONDecoder`. -/// Advanced users that want to inject their own codec can do it by overriding these functions. -extension EventLoopLambdaHandler where Event: Decodable { - public var decoder: LambdaCodableDecoder { - Lambda.defaultJSONDecoder - } -} - -/// Default `Output` to `ByteBuffer` encoder using Foundation's `JSONEncoder`. -/// Advanced users that want to inject their own codec can do it by overriding these functions. -extension EventLoopLambdaHandler where Output: Encodable { - public var encoder: LambdaCodableEncoder { - Lambda.defaultJSONEncoder - } -} - -public protocol LambdaCodableDecoder { - func decode(_ type: T.Type, from buffer: ByteBuffer) throws -> T -} - -public protocol LambdaCodableEncoder { - func encode(_ value: T, into buffer: inout ByteBuffer) throws -} - -extension Lambda { - fileprivate static let defaultJSONDecoder = JSONDecoder() - fileprivate static let defaultJSONEncoder = JSONEncoder() -} - -extension JSONDecoder: LambdaCodableDecoder {} - -extension JSONEncoder: LambdaCodableEncoder {} - extension JSONDecoder: AWSLambdaRuntimeCore.LambdaEventDecoder {} @usableFromInline diff --git a/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift b/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift index da3d41d2..6748d526 100644 --- a/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift +++ b/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift @@ -36,19 +36,19 @@ package struct InvocationMetadata: Hashable { package let clientContext: String? package let cognitoIdentity: String? - package init(headers: HTTPHeaders) throws { + package init(headers: HTTPHeaders) throws(NewLambdaRuntimeError) { guard let requestID = headers.first(name: AmazonHeaders.requestID), !requestID.isEmpty else { - throw LambdaRuntimeError.invocationMissingHeader(AmazonHeaders.requestID) + throw NewLambdaRuntimeError(code: .nextInvocationMissingHeaderRequestID) } guard let deadline = headers.first(name: AmazonHeaders.deadline), let unixTimeInMilliseconds = Int64(deadline) else { - throw LambdaRuntimeError.invocationMissingHeader(AmazonHeaders.deadline) + throw NewLambdaRuntimeError(code: .nextInvocationMissingHeaderDeadline) } guard let invokedFunctionARN = headers.first(name: AmazonHeaders.invokedFunctionARN) else { - throw LambdaRuntimeError.invocationMissingHeader(AmazonHeaders.invokedFunctionARN) + throw NewLambdaRuntimeError(code: .nextInvocationMissingHeaderInvokeFuctionARN) } self.requestID = requestID diff --git a/Sources/AWSLambdaRuntimeCore/DetachedTasks.swift b/Sources/AWSLambdaRuntimeCore/DetachedTasks.swift deleted file mode 100644 index d684ffe7..00000000 --- a/Sources/AWSLambdaRuntimeCore/DetachedTasks.swift +++ /dev/null @@ -1,94 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2022 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// -import Foundation -import Logging -import NIOConcurrencyHelpers -import NIOCore - -/// A container that allows tasks to finish after a synchronous invocation -/// has produced its response. -actor DetachedTasksContainer: Sendable { - struct Context: Sendable { - let eventLoop: EventLoop - let logger: Logger - } - - private var context: Context - private var storage: [RegistrationKey: EventLoopFuture] = [:] - - init(context: Context) { - self.context = context - } - - /// Adds a detached async task. - /// - /// - Parameters: - /// - name: The name of the task. - /// - task: The async task to execute. - /// - Returns: A `RegistrationKey` for the registered task. - func detached(task: @Sendable @escaping () async -> Void) { - let key = RegistrationKey() - let promise = self.context.eventLoop.makePromise(of: Void.self) - promise.completeWithTask(task) - let task = promise.futureResult.always { [weak self] _ in - guard let self else { return } - Task { - await self.removeTask(forKey: key) - } - } - self.storage[key] = task - } - - func removeTask(forKey key: RegistrationKey) { - self.storage.removeValue(forKey: key) - } - - /// Awaits all registered tasks to complete. - /// - /// - Returns: An `EventLoopFuture` that completes when all tasks have finished. - func awaitAll() -> EventLoopFuture { - let tasks = self.storage.values - if tasks.isEmpty { - return self.context.eventLoop.makeSucceededVoidFuture() - } else { - let context = context - return EventLoopFuture.andAllComplete(Array(tasks), on: context.eventLoop).flatMap { [weak self] in - guard let self else { - return context.eventLoop.makeSucceededFuture(()) - } - let promise = context.eventLoop.makePromise(of: Void.self) - promise.completeWithTask { - try await self.awaitAll().get() - } - return promise.futureResult - } - } - } -} - -extension DetachedTasksContainer { - /// Lambda detached task registration key. - struct RegistrationKey: Hashable, CustomStringConvertible, Sendable { - var value: String - - init() { - // UUID basically - self.value = UUID().uuidString - } - - var description: String { - self.value - } - } -} diff --git a/Sources/AWSLambdaRuntimeCore/HTTPClient.swift b/Sources/AWSLambdaRuntimeCore/HTTPClient.swift deleted file mode 100644 index 68289a92..00000000 --- a/Sources/AWSLambdaRuntimeCore/HTTPClient.swift +++ /dev/null @@ -1,342 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2017-2021 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import NIOConcurrencyHelpers -import NIOCore -import NIOHTTP1 -import NIOPosix - -/// A barebone HTTP client to interact with AWS Runtime Engine which is an HTTP server. -/// Note that Lambda Runtime API dictate that only one requests runs at a time. -/// This means we can avoid locks and other concurrency concern we would otherwise need to build into the client -final class HTTPClient { - private let eventLoop: EventLoop - private let configuration: LambdaConfiguration.RuntimeEngine - private let targetHost: String - - private var state = State.disconnected - private var executing = false - - init(eventLoop: EventLoop, configuration: LambdaConfiguration.RuntimeEngine) { - self.eventLoop = eventLoop - self.configuration = configuration - self.targetHost = "\(self.configuration.ip):\(self.configuration.port)" - } - - func get(url: String, headers: HTTPHeaders, timeout: TimeAmount? = nil) -> EventLoopFuture { - self.execute( - Request( - targetHost: self.targetHost, - url: url, - method: .GET, - headers: headers, - timeout: timeout ?? self.configuration.requestTimeout - ) - ) - } - - func post( - url: String, - headers: HTTPHeaders, - body: ByteBuffer?, - timeout: TimeAmount? = nil - ) -> EventLoopFuture { - self.execute( - Request( - targetHost: self.targetHost, - url: url, - method: .POST, - headers: headers, - body: body, - timeout: timeout ?? self.configuration.requestTimeout - ) - ) - } - - /// cancels the current request if there is one - func cancel() { - guard self.executing else { - // there is no request running. nothing to cancel - return - } - - guard case .connected(let channel) = self.state else { - preconditionFailure("if we are executing, we expect to have an open channel") - } - - channel.triggerUserOutboundEvent(RequestCancelEvent(), promise: nil) - } - - // TODO: cap reconnect attempt - private func execute(_ request: Request, validate: Bool = true) -> EventLoopFuture { - if validate { - precondition(self.executing == false, "expecting single request at a time") - self.executing = true - } - - switch self.state { - case .disconnected: - return self.connect().flatMap { channel -> EventLoopFuture in - self.state = .connected(channel) - return self.execute(request, validate: false) - } - case .connected(let channel): - guard channel.isActive else { - self.state = .disconnected - return self.execute(request, validate: false) - } - - let promise = channel.eventLoop.makePromise(of: Response.self) - promise.futureResult.whenComplete { _ in - precondition(self.executing == true, "invalid execution state") - self.executing = false - } - let wrapper = HTTPRequestWrapper(request: request, promise: promise) - channel.writeAndFlush(wrapper).cascadeFailure(to: promise) - return promise.futureResult - } - } - - private func connect() -> EventLoopFuture { - let bootstrap = ClientBootstrap(group: self.eventLoop) - .channelInitializer { channel in - do { - try channel.pipeline.syncOperations.addHTTPClientHandlers() - // Lambda quotas... An invocation payload is maximal 6MB in size: - // https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html - try channel.pipeline.syncOperations.addHandler( - NIOHTTPClientResponseAggregator(maxContentLength: 6 * 1024 * 1024) - ) - try channel.pipeline.syncOperations.addHandler(LambdaChannelHandler()) - return channel.eventLoop.makeSucceededFuture(()) - } catch { - return channel.eventLoop.makeFailedFuture(error) - } - } - - do { - // connect directly via socket address to avoid happy eyeballs (perf) - let address = try SocketAddress(ipAddress: self.configuration.ip, port: self.configuration.port) - return bootstrap.connect(to: address) - } catch { - return self.eventLoop.makeFailedFuture(error) - } - } - - struct Request: Equatable { - let url: String - let method: HTTPMethod - let targetHost: String - let headers: HTTPHeaders - let body: ByteBuffer? - let timeout: TimeAmount? - - init( - targetHost: String, - url: String, - method: HTTPMethod = .GET, - headers: HTTPHeaders = HTTPHeaders(), - body: ByteBuffer? = nil, - timeout: TimeAmount? - ) { - self.targetHost = targetHost - self.url = url - self.method = method - self.headers = headers - self.body = body - self.timeout = timeout - } - } - - struct Response: Equatable { - var version: HTTPVersion - var status: HTTPResponseStatus - var headers: HTTPHeaders - var body: ByteBuffer? - } - - enum Errors: Error { - case connectionResetByPeer - case timeout - case cancelled - } - - private enum State { - case disconnected - case connected(Channel) - } -} - -// no need in locks since we validate only one request can run at a time -private final class LambdaChannelHandler: ChannelDuplexHandler { - typealias InboundIn = NIOHTTPClientResponseFull - typealias OutboundIn = HTTPRequestWrapper - typealias OutboundOut = HTTPClientRequestPart - - enum State { - case idle - case running(promise: EventLoopPromise, timeout: Scheduled?) - case waitForConnectionClose(HTTPClient.Response, EventLoopPromise) - } - - private var state: State = .idle - private var lastError: Error? - - init() {} - - func write(context: ChannelHandlerContext, data: NIOAny, promise: EventLoopPromise?) { - guard case .idle = self.state else { - preconditionFailure("invalid state, outstanding request") - } - let wrapper = unwrapOutboundIn(data) - - var head = HTTPRequestHead( - version: .http1_1, - method: wrapper.request.method, - uri: wrapper.request.url, - headers: wrapper.request.headers - ) - head.headers.add(name: "host", value: wrapper.request.targetHost) - switch head.method { - case .POST, .PUT: - head.headers.add(name: "content-length", value: String(wrapper.request.body?.readableBytes ?? 0)) - default: - break - } - - let timeoutTask = wrapper.request.timeout.map { - context.eventLoop.scheduleTask(in: $0) { - guard case .running = self.state else { - preconditionFailure("invalid state") - } - - context.pipeline.fireErrorCaught(HTTPClient.Errors.timeout) - } - } - self.state = .running(promise: wrapper.promise, timeout: timeoutTask) - - context.write(wrapOutboundOut(.head(head)), promise: nil) - if let body = wrapper.request.body { - context.write(wrapOutboundOut(.body(IOData.byteBuffer(body))), promise: nil) - } - context.writeAndFlush(wrapOutboundOut(.end(nil)), promise: promise) - } - - func channelRead(context: ChannelHandlerContext, data: NIOAny) { - guard case .running(let promise, let timeout) = self.state else { - preconditionFailure("invalid state, no pending request") - } - - let response = unwrapInboundIn(data) - - let httpResponse = HTTPClient.Response( - version: response.head.version, - status: response.head.status, - headers: response.head.headers, - body: response.body - ) - - timeout?.cancel() - - // As defined in RFC 7230 Section 6.3: - // HTTP/1.1 defaults to the use of "persistent connections", allowing - // multiple requests and responses to be carried over a single - // connection. The "close" connection option is used to signal that a - // connection will not persist after the current request/response. HTTP - // implementations SHOULD support persistent connections. - // - // That's why we only assume the connection shall be closed if we receive - // a "connection = close" header. - let serverCloseConnection = - response.head.headers["connection"].contains(where: { $0.lowercased() == "close" }) - - let closeConnection = serverCloseConnection || response.head.version != .http1_1 - - if closeConnection { - // If we were succeeding the request promise here directly and closing the connection - // after succeeding the promise we may run into a race condition: - // - // The lambda runtime will ask for the next work item directly after a succeeded post - // response request. The desire for the next work item might be faster than the attempt - // to close the connection. This will lead to a situation where we try to the connection - // but the next request has already been scheduled on the connection that we want to - // close. For this reason we postpone succeeding the promise until the connection has - // been closed. This codepath will only be hit in the very, very unlikely event of the - // Lambda control plane demanding to close connection. (It's more or less only - // implemented to support http1.1 correctly.) This behavior is ensured with the test - // `LambdaTest.testNoKeepAliveServer`. - self.state = .waitForConnectionClose(httpResponse, promise) - _ = context.channel.close() - return - } else { - self.state = .idle - promise.succeed(httpResponse) - } - } - - func errorCaught(context: ChannelHandlerContext, error: Error) { - // pending responses will fail with lastError in channelInactive since we are calling context.close - self.lastError = error - context.channel.close(promise: nil) - } - - func channelInactive(context: ChannelHandlerContext) { - // fail any pending responses with last error or assume peer disconnected - context.fireChannelInactive() - - switch self.state { - case .idle: - break - - case .running(let promise, let timeout): - self.state = .idle - timeout?.cancel() - promise.fail(self.lastError ?? HTTPClient.Errors.connectionResetByPeer) - - case .waitForConnectionClose(let response, let promise): - self.state = .idle - promise.succeed(response) - } - } - - func triggerUserOutboundEvent(context: ChannelHandlerContext, event: Any, promise: EventLoopPromise?) { - switch event { - case is RequestCancelEvent: - switch self.state { - case .idle: - break - case .running(let promise, let timeout): - self.state = .idle - timeout?.cancel() - promise.fail(HTTPClient.Errors.cancelled) - - // after the cancel error has been send, we want to close the connection so - // that no more packets can be read on this connection. - _ = context.channel.close() - case .waitForConnectionClose(_, let promise): - self.state = .idle - promise.fail(HTTPClient.Errors.cancelled) - } - default: - context.triggerUserOutboundEvent(event, promise: promise) - } - } -} - -private struct HTTPRequestWrapper { - let request: HTTPClient.Request - let promise: EventLoopPromise -} - -private struct RequestCancelEvent {} diff --git a/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift b/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift index d2a1ebbf..dc0165d4 100644 --- a/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift +++ b/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift @@ -55,14 +55,13 @@ private enum LocalLambda { private let port: Int private let invocationEndpoint: String - public init(invocationEndpoint: String?) { - let configuration = LambdaConfiguration() + init(invocationEndpoint: String?) { var logger = Logger(label: "LocalLambdaServer") - logger.logLevel = configuration.general.logLevel + logger.logLevel = .info self.logger = logger self.group = MultiThreadedEventLoopGroup(numberOfThreads: 1) - self.host = configuration.runtimeEngine.ip - self.port = configuration.runtimeEngine.port + self.host = "127.0.0.1" + self.port = 0 self.invocationEndpoint = invocationEndpoint ?? "/invoke" } diff --git a/Sources/AWSLambdaRuntimeCore/Lambda+String.swift b/Sources/AWSLambdaRuntimeCore/Lambda+String.swift deleted file mode 100644 index e7674e28..00000000 --- a/Sources/AWSLambdaRuntimeCore/Lambda+String.swift +++ /dev/null @@ -1,77 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2017-2022 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// -import NIOCore - -// MARK: - SimpleLambdaHandler String support - -extension SimpleLambdaHandler where Event == String { - /// Implementation of a `ByteBuffer` to `String` decoding. - @inlinable - public func decode(buffer: ByteBuffer) throws -> Event { - guard let value = buffer.getString(at: buffer.readerIndex, length: buffer.readableBytes) else { - throw CodecError.invalidString - } - return value - } -} - -extension SimpleLambdaHandler where Output == String { - /// Implementation of `String` to `ByteBuffer` encoding. - @inlinable - public func encode(value: Output, into buffer: inout ByteBuffer) throws { - buffer.writeString(value) - } -} - -// MARK: - LambdaHandler String support - -extension LambdaHandler where Event == String { - /// Implementation of a `ByteBuffer` to `String` decoding. - @inlinable - public func decode(buffer: ByteBuffer) throws -> Event { - guard let value = buffer.getString(at: buffer.readerIndex, length: buffer.readableBytes) else { - throw CodecError.invalidString - } - return value - } -} - -extension LambdaHandler where Output == String { - /// Implementation of `String` to `ByteBuffer` encoding. - @inlinable - public func encode(value: Output, into buffer: inout ByteBuffer) throws { - buffer.writeString(value) - } -} - -// MARK: - EventLoopLambdaHandler String support - -extension EventLoopLambdaHandler where Event == String { - /// Implementation of `String` to `ByteBuffer` encoding. - @inlinable - public func decode(buffer: ByteBuffer) throws -> Event { - guard let value = buffer.getString(at: buffer.readerIndex, length: buffer.readableBytes) else { - throw CodecError.invalidString - } - return value - } -} - -extension EventLoopLambdaHandler where Output == String { - /// Implementation of a `ByteBuffer` to `String` decoding. - @inlinable - public func encode(value: Output, into buffer: inout ByteBuffer) throws { - buffer.writeString(value) - } -} diff --git a/Sources/AWSLambdaRuntimeCore/Lambda.swift b/Sources/AWSLambdaRuntimeCore/Lambda.swift index d4b7363d..267a14c3 100644 --- a/Sources/AWSLambdaRuntimeCore/Lambda.swift +++ b/Sources/AWSLambdaRuntimeCore/Lambda.swift @@ -28,150 +28,7 @@ import ucrt #error("Unsupported platform") #endif -#if swift(<5.9) -import Backtrace -#endif - -public enum Lambda { - /// Run a Lambda defined by implementing the ``SimpleLambdaHandler`` protocol. - /// The Runtime will manage the Lambdas application lifecycle automatically. - /// - /// - parameters: - /// - configuration: A Lambda runtime configuration object - /// - handlerType: The Handler to create and invoke. - /// - /// - note: This is a blocking operation that will run forever, as its lifecycle is managed by the AWS Lambda Runtime Engine. - static func run( - configuration: LambdaConfiguration = .init(), - handlerType: Handler.Type - ) -> Result { - self.run( - configuration: configuration, - handlerProvider: CodableSimpleLambdaHandler.makeHandler(context:) - ) - } - - /// Run a Lambda defined by implementing the ``LambdaHandler`` protocol. - /// The Runtime will manage the Lambdas application lifecycle automatically. It will invoke the - /// ``LambdaHandler/makeHandler(context:)`` to create a new Handler. - /// - /// - parameters: - /// - configuration: A Lambda runtime configuration object - /// - handlerType: The Handler to create and invoke. - /// - /// - note: This is a blocking operation that will run forever, as its lifecycle is managed by the AWS Lambda Runtime Engine. - static func run( - configuration: LambdaConfiguration = .init(), - handlerType: Handler.Type - ) -> Result { - self.run(configuration: configuration, handlerProvider: CodableLambdaHandler.makeHandler(context:)) - } - - /// Run a Lambda defined by implementing the ``EventLoopLambdaHandler`` protocol. - /// The Runtime will manage the Lambdas application lifecycle automatically. It will invoke the - /// ``EventLoopLambdaHandler/makeHandler(context:)`` to create a new Handler. - /// - /// - parameters: - /// - configuration: A Lambda runtime configuration object - /// - handlerType: The Handler to create and invoke. - /// - /// - note: This is a blocking operation that will run forever, as its lifecycle is managed by the AWS Lambda Runtime Engine. - static func run( - configuration: LambdaConfiguration = .init(), - handlerType: Handler.Type - ) -> Result { - self.run( - configuration: configuration, - handlerProvider: CodableEventLoopLambdaHandler.makeHandler(context:) - ) - } - - /// Run a Lambda defined by implementing the ``ByteBufferLambdaHandler`` protocol. - /// The Runtime will manage the Lambdas application lifecycle automatically. It will invoke the - /// ``ByteBufferLambdaHandler/makeHandler(context:)`` to create a new Handler. - /// - /// - parameters: - /// - configuration: A Lambda runtime configuration object - /// - handlerType: The Handler to create and invoke. - /// - /// - note: This is a blocking operation that will run forever, as its lifecycle is managed by the AWS Lambda Runtime Engine. - static func run( - configuration: LambdaConfiguration = .init(), - handlerType: (some ByteBufferLambdaHandler).Type - ) -> Result { - self.run(configuration: configuration, handlerProvider: handlerType.makeHandler(context:)) - } - - /// Run a Lambda defined by implementing the ``LambdaRuntimeHandler`` protocol. - /// - parameters: - /// - configuration: A Lambda runtime configuration object - /// - handlerProvider: A provider of the ``LambdaRuntimeHandler`` to invoke. - /// - /// - note: This is a blocking operation that will run forever, as its lifecycle is managed by the AWS Lambda Runtime Engine. - static func run( - configuration: LambdaConfiguration = .init(), - handlerProvider: @escaping (LambdaInitializationContext) -> EventLoopFuture - ) -> Result { - let _run = { (configuration: LambdaConfiguration) -> Result in - #if swift(<5.9) - Backtrace.install() - #endif - var logger = Logger(label: "Lambda") - logger.logLevel = configuration.general.logLevel - - var result: Result! - MultiThreadedEventLoopGroup.withCurrentThreadAsEventLoop { eventLoop in - let runtime = LambdaRuntime( - handlerProvider: handlerProvider, - eventLoop: eventLoop, - logger: logger, - configuration: configuration - ) - #if DEBUG - let signalSource = trap(signal: configuration.lifecycle.stopSignal) { signal in - logger.info("intercepted signal: \(signal)") - runtime.shutdown() - } - #endif - - runtime.start().flatMap { - runtime.shutdownFuture - }.whenComplete { lifecycleResult in - #if DEBUG - signalSource.cancel() - #endif - eventLoop.shutdownGracefully { error in - if let error = error { - preconditionFailure("Failed to shutdown eventloop: \(error)") - } - } - result = lifecycleResult - } - } - logger.info("shutdown completed") - return result - } - - // start local server for debugging in DEBUG mode only - #if DEBUG - if Lambda.env("LOCAL_LAMBDA_SERVER_ENABLED").flatMap(Bool.init) ?? false { - do { - return try Lambda.withLocalServer( - invocationEndpoint: Lambda.env("LOCAL_LAMBDA_SERVER_INVOCATION_ENDPOINT") - ) { - _run(configuration) - } - } catch { - return .failure(error) - } - } else { - return _run(configuration) - } - #else - return _run(configuration) - #endif - } -} +enum Lambda {} // MARK: - Public API diff --git a/Sources/AWSLambdaRuntimeCore/LambdaConfiguration.swift b/Sources/AWSLambdaRuntimeCore/LambdaConfiguration.swift deleted file mode 100644 index 44489de3..00000000 --- a/Sources/AWSLambdaRuntimeCore/LambdaConfiguration.swift +++ /dev/null @@ -1,89 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2017-2021 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import Dispatch -import Logging -import NIOCore - -struct LambdaConfiguration: CustomStringConvertible { - let general: General - let lifecycle: Lifecycle - let runtimeEngine: RuntimeEngine - - init() { - self.init(general: .init(), lifecycle: .init(), runtimeEngine: .init()) - } - - init(general: General? = nil, lifecycle: Lifecycle? = nil, runtimeEngine: RuntimeEngine? = nil) { - self.general = general ?? General() - self.lifecycle = lifecycle ?? Lifecycle() - self.runtimeEngine = runtimeEngine ?? RuntimeEngine() - } - - struct General: CustomStringConvertible { - let logLevel: Logger.Level - - init(logLevel: Logger.Level? = nil) { - self.logLevel = logLevel ?? Lambda.env("LOG_LEVEL").flatMap(Logger.Level.init) ?? .info - } - - var description: String { - "\(General.self)(logLevel: \(self.logLevel))" - } - } - - struct Lifecycle: CustomStringConvertible { - let id: String - let maxTimes: Int - let stopSignal: Signal - - init(id: String? = nil, maxTimes: Int? = nil, stopSignal: Signal? = nil) { - self.id = id ?? "\(DispatchTime.now().uptimeNanoseconds)" - self.maxTimes = maxTimes ?? Lambda.env("MAX_REQUESTS").flatMap(Int.init) ?? 0 - self.stopSignal = - stopSignal ?? Lambda.env("STOP_SIGNAL").flatMap(Int32.init).flatMap(Signal.init) ?? Signal.TERM - precondition(self.maxTimes >= 0, "maxTimes must be equal or larger than 0") - } - - var description: String { - "\(Lifecycle.self)(id: \(self.id), maxTimes: \(self.maxTimes), stopSignal: \(self.stopSignal))" - } - } - - struct RuntimeEngine: CustomStringConvertible { - let ip: String - let port: Int - let requestTimeout: TimeAmount? - - init(address: String? = nil, keepAlive: Bool? = nil, requestTimeout: TimeAmount? = nil) { - let ipPort = - (address ?? Lambda.env("AWS_LAMBDA_RUNTIME_API"))?.split(separator: ":") ?? ["127.0.0.1", "7000"] - guard ipPort.count == 2, let port = Int(ipPort[1]) else { - preconditionFailure("invalid ip+port configuration \(ipPort)") - } - self.ip = String(ipPort[0]) - self.port = port - self.requestTimeout = - requestTimeout ?? Lambda.env("REQUEST_TIMEOUT").flatMap(Int64.init).flatMap { .milliseconds($0) } - } - - var description: String { - "\(RuntimeEngine.self)(ip: \(self.ip), port: \(self.port), requestTimeout: \(String(describing: self.requestTimeout))" - } - } - - var description: String { - "\(Self.self)\n \(self.general))\n \(self.lifecycle)\n \(self.runtimeEngine)" - } -} diff --git a/Sources/AWSLambdaRuntimeCore/LambdaContext.swift b/Sources/AWSLambdaRuntimeCore/LambdaContext.swift deleted file mode 100644 index a7019757..00000000 --- a/Sources/AWSLambdaRuntimeCore/LambdaContext.swift +++ /dev/null @@ -1,242 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2017-2022 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import Logging -import NIOCore - -#if swift(<5.9) -@preconcurrency import Dispatch -#else -import Dispatch -#endif - -// MARK: - InitializationContext - -/// Lambda runtime initialization context. -/// The Lambda runtime generates and passes the `LambdaInitializationContext` to the Handlers -/// ``ByteBufferLambdaHandler/makeHandler(context:)`` or ``LambdaHandler/init(context:)`` -/// as an argument. -public struct LambdaInitializationContext: Sendable { - /// `Logger` to log with. - /// - /// - note: The `LogLevel` can be configured using the `LOG_LEVEL` environment variable. - public let logger: Logger - - /// The `EventLoop` the Lambda is executed on. Use this to schedule work with. - /// - /// - note: The `EventLoop` is shared with the Lambda runtime engine and should be handled with extra care. - /// Most importantly the `EventLoop` must never be blocked. - public let eventLoop: EventLoop - - /// `ByteBufferAllocator` to allocate `ByteBuffer`. - public let allocator: ByteBufferAllocator - - /// ``LambdaTerminator`` to register shutdown operations. - public let terminator: LambdaTerminator - - init(logger: Logger, eventLoop: EventLoop, allocator: ByteBufferAllocator, terminator: LambdaTerminator) { - self.eventLoop = eventLoop - self.logger = logger - self.allocator = allocator - self.terminator = terminator - } - - /// This interface is not part of the public API and must not be used by adopters. This API is not part of semver versioning. - public static func __forTestsOnly( - logger: Logger, - eventLoop: EventLoop - ) -> LambdaInitializationContext { - LambdaInitializationContext( - logger: logger, - eventLoop: eventLoop, - allocator: ByteBufferAllocator(), - terminator: LambdaTerminator() - ) - } -} - -// MARK: - Context - -/// Lambda runtime context. -/// The Lambda runtime generates and passes the `LambdaContext` to the Lambda handler as an argument. -public struct LambdaContext: CustomDebugStringConvertible, Sendable { - final class _Storage: Sendable { - let requestID: String - let traceID: String - let invokedFunctionARN: String - let deadline: DispatchWallTime - let cognitoIdentity: String? - let clientContext: String? - let logger: Logger - let eventLoop: EventLoop - let allocator: ByteBufferAllocator - let tasks: DetachedTasksContainer - - init( - requestID: String, - traceID: String, - invokedFunctionARN: String, - deadline: DispatchWallTime, - cognitoIdentity: String?, - clientContext: String?, - logger: Logger, - eventLoop: EventLoop, - allocator: ByteBufferAllocator, - tasks: DetachedTasksContainer - ) { - self.requestID = requestID - self.traceID = traceID - self.invokedFunctionARN = invokedFunctionARN - self.deadline = deadline - self.cognitoIdentity = cognitoIdentity - self.clientContext = clientContext - self.logger = logger - self.eventLoop = eventLoop - self.allocator = allocator - self.tasks = tasks - } - } - - private var storage: _Storage - - /// The request ID, which identifies the request that triggered the function invocation. - public var requestID: String { - self.storage.requestID - } - - /// The AWS X-Ray tracing header. - public var traceID: String { - self.storage.traceID - } - - /// The ARN of the Lambda function, version, or alias that's specified in the invocation. - public var invokedFunctionARN: String { - self.storage.invokedFunctionARN - } - - /// The timestamp that the function times out. - public var deadline: DispatchWallTime { - self.storage.deadline - } - - /// For invocations from the AWS Mobile SDK, data about the Amazon Cognito identity provider. - public var cognitoIdentity: String? { - self.storage.cognitoIdentity - } - - /// For invocations from the AWS Mobile SDK, data about the client application and device. - public var clientContext: String? { - self.storage.clientContext - } - - /// `Logger` to log with. - /// - /// - note: The `LogLevel` can be configured using the `LOG_LEVEL` environment variable. - public var logger: Logger { - self.storage.logger - } - - /// The `EventLoop` the Lambda is executed on. Use this to schedule work with. - /// This is useful when implementing the ``EventLoopLambdaHandler`` protocol. - /// - /// - note: The `EventLoop` is shared with the Lambda runtime engine and should be handled with extra care. - /// Most importantly the `EventLoop` must never be blocked. - public var eventLoop: EventLoop { - self.storage.eventLoop - } - - /// `ByteBufferAllocator` to allocate `ByteBuffer`. - /// This is useful when implementing ``EventLoopLambdaHandler``. - public var allocator: ByteBufferAllocator { - self.storage.allocator - } - - init( - requestID: String, - traceID: String, - invokedFunctionARN: String, - deadline: DispatchWallTime, - cognitoIdentity: String? = nil, - clientContext: String? = nil, - logger: Logger, - eventLoop: EventLoop, - allocator: ByteBufferAllocator - ) { - self.storage = _Storage( - requestID: requestID, - traceID: traceID, - invokedFunctionARN: invokedFunctionARN, - deadline: deadline, - cognitoIdentity: cognitoIdentity, - clientContext: clientContext, - logger: logger, - eventLoop: eventLoop, - allocator: allocator, - tasks: DetachedTasksContainer( - context: DetachedTasksContainer.Context( - eventLoop: eventLoop, - logger: logger - ) - ) - ) - } - - public func getRemainingTime() -> TimeAmount { - let deadline = self.deadline.millisSinceEpoch - let now = DispatchWallTime.now().millisSinceEpoch - - let remaining = deadline - now - return .milliseconds(remaining) - } - - var tasks: DetachedTasksContainer { - self.storage.tasks - } - - /// Registers a background task that continues running after the synchronous invocation has completed. - /// This is useful for tasks like flushing metrics or performing clean-up operations without delaying the response. - /// - /// - Parameter body: An asynchronous closure that performs the background task. - /// - Warning: You will be billed for the milliseconds of Lambda execution time until the very last - /// background task is finished. - public func detachedBackgroundTask(_ body: @escaping @Sendable () async -> Void) { - Task { - await self.tasks.detached(task: body) - } - } - - public var debugDescription: String { - "\(Self.self)(requestID: \(self.requestID), traceID: \(self.traceID), invokedFunctionARN: \(self.invokedFunctionARN), cognitoIdentity: \(self.cognitoIdentity ?? "nil"), clientContext: \(self.clientContext ?? "nil"), deadline: \(self.deadline))" - } - - /// This interface is not part of the public API and must not be used by adopters. This API is not part of semver versioning. - public static func __forTestsOnly( - requestID: String, - traceID: String, - invokedFunctionARN: String, - timeout: DispatchTimeInterval, - logger: Logger, - eventLoop: EventLoop - ) -> LambdaContext { - LambdaContext( - requestID: requestID, - traceID: traceID, - invokedFunctionARN: invokedFunctionARN, - deadline: .now() + timeout, - logger: logger, - eventLoop: eventLoop, - allocator: ByteBufferAllocator() - ) - } -} diff --git a/Sources/AWSLambdaRuntimeCore/LambdaHandler.swift b/Sources/AWSLambdaRuntimeCore/LambdaHandler.swift deleted file mode 100644 index 9ff6f330..00000000 --- a/Sources/AWSLambdaRuntimeCore/LambdaHandler.swift +++ /dev/null @@ -1,462 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2017-2022 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import Dispatch -import NIOCore - -// MARK: - SimpleLambdaHandler - -/// Strongly typed, processing protocol for a Lambda that takes a user defined -/// ``SimpleLambdaHandler/Event`` and returns a user defined -/// ``SimpleLambdaHandler/Output`` asynchronously. -/// -/// - note: Most users should implement the ``LambdaHandler`` protocol instead -/// which defines the Lambda initialization method. -public protocol SimpleLambdaHandler { - /// The lambda function's input. In most cases this should be `Codable`. If your event originates from an - /// AWS service, have a look at [AWSLambdaEvents](https://github.com/swift-server/swift-aws-lambda-events), - /// which provides a number of commonly used AWS Event implementations. - associatedtype Event - /// The lambda function's output. Can be `Void`. - associatedtype Output - - init() - - /// The Lambda handling method. - /// Concrete Lambda handlers implement this method to provide the Lambda functionality. - /// - /// - parameters: - /// - event: Event of type `Event` representing the event or request. - /// - context: Runtime ``LambdaContext``. - /// - /// - Returns: A Lambda result ot type `Output`. - func handle(_ event: Event, context: LambdaContext) async throws -> Output - - /// Encode a response of type ``Output`` to `ByteBuffer`. - /// Concrete Lambda handlers implement this method to provide coding functionality. - /// - parameters: - /// - value: Response of type ``Output``. - /// - buffer: A `ByteBuffer` to encode into, will be overwritten. - func encode(value: Output, into buffer: inout ByteBuffer) throws - - /// Decode a `ByteBuffer` to a request or event of type ``Event``. - /// Concrete Lambda handlers implement this method to provide coding functionality. - /// - /// - parameters: - /// - buffer: The `ByteBuffer` to decode. - /// - /// - Returns: A request or event of type ``Event``. - func decode(buffer: ByteBuffer) throws -> Event -} - -@usableFromInline -final class CodableSimpleLambdaHandler: ByteBufferLambdaHandler { - @usableFromInline - let handler: Underlying - @usableFromInline - private(set) var outputBuffer: ByteBuffer - - @inlinable - static func makeHandler(context: LambdaInitializationContext) -> EventLoopFuture { - let promise = context.eventLoop.makePromise(of: CodableSimpleLambdaHandler.self) - promise.completeWithTask { - let handler = Underlying() - return CodableSimpleLambdaHandler(handler: handler, allocator: context.allocator) - } - return promise.futureResult - } - - @inlinable - init(handler: Underlying, allocator: ByteBufferAllocator) { - self.handler = handler - self.outputBuffer = allocator.buffer(capacity: 1024 * 1024) - } - - @inlinable - func handle(_ buffer: ByteBuffer, context: LambdaContext) -> EventLoopFuture { - let promise = context.eventLoop.makePromise(of: ByteBuffer?.self) - promise.completeWithTask { - let input: Underlying.Event - do { - input = try self.handler.decode(buffer: buffer) - } catch { - throw CodecError.requestDecoding(error) - } - - let output = try await self.handler.handle(input, context: context) - - do { - self.outputBuffer.clear() - try self.handler.encode(value: output, into: &self.outputBuffer) - return self.outputBuffer - } catch { - throw CodecError.responseEncoding(error) - } - } - return promise.futureResult - } -} - -/// Implementation of `ByteBuffer` to `Void` decoding. -extension SimpleLambdaHandler where Output == Void { - @inlinable - public func encode(value: Output, into buffer: inout ByteBuffer) throws {} -} - -extension SimpleLambdaHandler { - /// Initializes and runs the Lambda function. - /// - /// If you precede your ``SimpleLambdaHandler`` conformer's declaration with the - /// [@main](https://docs.swift.org/swift-book/ReferenceManual/Attributes.html#ID626) - /// attribute, the system calls the conformer's `main()` method to launch the lambda function. - /// - /// The lambda runtime provides a default implementation of the method that manages the launch - /// process. - public static func main() { - _ = Lambda.run(configuration: .init(), handlerType: Self.self) - } -} - -// MARK: - LambdaHandler - -/// Strongly typed, processing protocol for a Lambda that takes a user defined -/// ``LambdaHandler/Event`` and returns a user defined -/// ``LambdaHandler/Output`` asynchronously. -/// -/// - note: Most users should implement this protocol instead of the lower -/// level protocols ``EventLoopLambdaHandler`` and -/// ``ByteBufferLambdaHandler``. -public protocol LambdaHandler { - /// The lambda function's input. In most cases this should be `Codable`. If your event originates from an - /// AWS service, have a look at [AWSLambdaEvents](https://github.com/swift-server/swift-aws-lambda-events), - /// which provides a number of commonly used AWS Event implementations. - associatedtype Event - /// The lambda function's output. Can be `Void`. - associatedtype Output - - /// The Lambda initialization method. - /// Use this method to initialize resources that will be used in every request. - /// - /// Examples for this can be HTTP or database clients. - /// - parameters: - /// - context: Runtime ``LambdaInitializationContext``. - init(context: LambdaInitializationContext) async throws - - /// The Lambda handling method. - /// Concrete Lambda handlers implement this method to provide the Lambda functionality. - /// - /// - parameters: - /// - event: Event of type `Event` representing the event or request. - /// - context: Runtime ``LambdaContext``. - /// - /// - Returns: A Lambda result ot type `Output`. - func handle(_ event: Event, context: LambdaContext) async throws -> Output - - /// Encode a response of type ``Output`` to `ByteBuffer`. - /// Concrete Lambda handlers implement this method to provide coding functionality. - /// - parameters: - /// - value: Response of type ``Output``. - /// - buffer: A `ByteBuffer` to encode into, will be overwritten. - func encode(value: Output, into buffer: inout ByteBuffer) throws - - /// Decode a `ByteBuffer` to a request or event of type ``Event``. - /// Concrete Lambda handlers implement this method to provide coding functionality. - /// - /// - parameters: - /// - buffer: The `ByteBuffer` to decode. - /// - /// - Returns: A request or event of type ``Event``. - func decode(buffer: ByteBuffer) throws -> Event -} - -@usableFromInline -final class CodableLambdaHandler: ByteBufferLambdaHandler { - @usableFromInline - let handler: Underlying - @usableFromInline - private(set) var outputBuffer: ByteBuffer - - @inlinable - static func makeHandler(context: LambdaInitializationContext) -> EventLoopFuture { - let promise = context.eventLoop.makePromise(of: CodableLambdaHandler.self) - promise.completeWithTask { - let handler = try await Underlying(context: context) - return CodableLambdaHandler(handler: handler, allocator: context.allocator) - } - return promise.futureResult - } - - @inlinable - init(handler: Underlying, allocator: ByteBufferAllocator) { - self.handler = handler - self.outputBuffer = allocator.buffer(capacity: 1024 * 1024) - } - - @inlinable - func handle(_ buffer: ByteBuffer, context: LambdaContext) -> EventLoopFuture { - let promise = context.eventLoop.makePromise(of: ByteBuffer?.self) - promise.completeWithTask { - let input: Underlying.Event - do { - input = try self.handler.decode(buffer: buffer) - } catch { - throw CodecError.requestDecoding(error) - } - - let output = try await self.handler.handle(input, context: context) - - do { - self.outputBuffer.clear() - try self.handler.encode(value: output, into: &self.outputBuffer) - return self.outputBuffer - } catch { - throw CodecError.responseEncoding(error) - } - } - return promise.futureResult - } -} - -/// Implementation of `ByteBuffer` to `Void` decoding. -extension LambdaHandler where Output == Void { - @inlinable - public func encode(value: Output, into buffer: inout ByteBuffer) throws {} -} - -extension LambdaHandler { - /// Initializes and runs the Lambda function. - /// - /// If you precede your ``LambdaHandler`` conformer's declaration with the - /// [@main](https://docs.swift.org/swift-book/ReferenceManual/Attributes.html#ID626) - /// attribute, the system calls the conformer's `main()` method to launch the lambda function. - /// - /// The lambda runtime provides a default implementation of the method that manages the launch - /// process. - public static func main() { - _ = Lambda.run(configuration: .init(), handlerType: Self.self) - } -} - -/// unchecked sendable wrapper for the handler -/// this is safe since lambda runtime is designed to calls the handler serially -@usableFromInline -struct UncheckedSendableHandler: @unchecked Sendable -where Event == Underlying.Event, Output == Underlying.Output { - @usableFromInline - let underlying: Underlying - - @inlinable - init(underlying: Underlying) { - self.underlying = underlying - } - - @inlinable - func handle(_ event: Event, context: LambdaContext) async throws -> Output { - try await self.underlying.handle(event, context: context) - } -} - -// MARK: - EventLoopLambdaHandler - -/// Strongly typed, `EventLoopFuture` based processing protocol for a Lambda that takes a user -/// defined ``EventLoopLambdaHandler/Event`` and returns a user defined ``EventLoopLambdaHandler/Output`` asynchronously. -/// -/// - note: To implement a Lambda, implement either ``LambdaHandler`` or the -/// ``EventLoopLambdaHandler`` protocol. The ``LambdaHandler`` will offload -/// the Lambda execution to an async Task making processing safer but slower (due to -/// fewer thread hops). -/// The ``EventLoopLambdaHandler`` will execute the Lambda on the same `EventLoop` -/// as the core runtime engine, making the processing faster but requires more care from the -/// implementation to never block the `EventLoop`. Implement this protocol only in performance -/// critical situations and implement ``LambdaHandler`` in all other circumstances. -public protocol EventLoopLambdaHandler { - /// The lambda functions input. In most cases this should be `Codable`. If your event originates from an - /// AWS service, have a look at [AWSLambdaEvents](https://github.com/swift-server/swift-aws-lambda-events), - /// which provides a number of commonly used AWS Event implementations. - associatedtype Event - /// The lambda functions output. Can be `Void`. - associatedtype Output - - /// Create a Lambda handler for the runtime. - /// - /// Use this to initialize all your resources that you want to cache between invocations. This could be database - /// connections and HTTP clients for example. It is encouraged to use the given `EventLoop`'s conformance - /// to `EventLoopGroup` when initializing NIO dependencies. This will improve overall performance, as it - /// minimizes thread hopping. - static func makeHandler(context: LambdaInitializationContext) -> EventLoopFuture - - /// The Lambda handling method. - /// Concrete Lambda handlers implement this method to provide the Lambda functionality. - /// - /// - parameters: - /// - context: Runtime ``LambdaContext``. - /// - event: Event of type `Event` representing the event or request. - /// - /// - Returns: An `EventLoopFuture` to report the result of the Lambda back to the runtime engine. - /// The `EventLoopFuture` should be completed with either a response of type ``Output`` or an `Error`. - func handle(_ event: Event, context: LambdaContext) -> EventLoopFuture - - /// Encode a response of type ``Output`` to `ByteBuffer`. - /// Concrete Lambda handlers implement this method to provide coding functionality. - /// - parameters: - /// - value: Response of type ``Output``. - /// - buffer: A `ByteBuffer` to encode into, will be overwritten. - /// - /// - Returns: A `ByteBuffer` with the encoded version of the `value`. - func encode(value: Output, into buffer: inout ByteBuffer) throws - - /// Decode a `ByteBuffer` to a request or event of type ``Event``. - /// Concrete Lambda handlers implement this method to provide coding functionality. - /// - /// - parameters: - /// - buffer: The `ByteBuffer` to decode. - /// - /// - Returns: A request or event of type ``Event``. - func decode(buffer: ByteBuffer) throws -> Event -} - -/// Implementation of `ByteBuffer` to `Void` decoding. -extension EventLoopLambdaHandler where Output == Void { - @inlinable - public func encode(value: Output, into buffer: inout ByteBuffer) throws {} -} - -@usableFromInline -final class CodableEventLoopLambdaHandler: ByteBufferLambdaHandler { - @usableFromInline - let handler: Underlying - @usableFromInline - private(set) var outputBuffer: ByteBuffer - - @inlinable - static func makeHandler(context: LambdaInitializationContext) -> EventLoopFuture { - Underlying.makeHandler(context: context).map { handler -> CodableEventLoopLambdaHandler in - CodableEventLoopLambdaHandler(handler: handler, allocator: context.allocator) - } - } - - @inlinable - init(handler: Underlying, allocator: ByteBufferAllocator) { - self.handler = handler - self.outputBuffer = allocator.buffer(capacity: 1024 * 1024) - } - - @inlinable - func handle(_ buffer: ByteBuffer, context: LambdaContext) -> EventLoopFuture { - let input: Underlying.Event - do { - input = try self.handler.decode(buffer: buffer) - } catch { - return context.eventLoop.makeFailedFuture(CodecError.requestDecoding(error)) - } - - return self.handler.handle(input, context: context).flatMapThrowing { output in - do { - self.outputBuffer.clear() - try self.handler.encode(value: output, into: &self.outputBuffer) - return self.outputBuffer - } catch { - throw CodecError.responseEncoding(error) - } - } - } -} - -extension EventLoopLambdaHandler { - /// Initializes and runs the Lambda function. - /// - /// If you precede your ``EventLoopLambdaHandler`` conformer's declaration with the - /// [@main](https://docs.swift.org/swift-book/ReferenceManual/Attributes.html#ID626) - /// attribute, the system calls the conformer's `main()` method to launch the lambda function. - /// - /// The lambda runtime provides a default implementation of the method that manages the launch - /// process. - public static func main() { - _ = Lambda.run(configuration: .init(), handlerType: Self.self) - } -} - -// MARK: - ByteBufferLambdaHandler - -/// An `EventLoopFuture` based processing protocol for a Lambda that takes a `ByteBuffer` and returns -/// an optional `ByteBuffer` asynchronously. -/// -/// - note: This is a low level protocol designed to power the higher level ``EventLoopLambdaHandler`` and -/// ``LambdaHandler`` based APIs. -/// Most users are not expected to use this protocol. -public protocol ByteBufferLambdaHandler: LambdaRuntimeHandler { - /// Create a Lambda handler for the runtime. - /// - /// Use this to initialize all your resources that you want to cache between invocations. This could be database - /// connections and HTTP clients for example. It is encouraged to use the given `EventLoop`'s conformance - /// to `EventLoopGroup` when initializing NIO dependencies. This will improve overall performance, as it - /// minimizes thread hopping. - static func makeHandler(context: LambdaInitializationContext) -> EventLoopFuture - - /// The Lambda handling method. - /// Concrete Lambda handlers implement this method to provide the Lambda functionality. - /// - /// - parameters: - /// - buffer: The event or input payload encoded as `ByteBuffer`. - /// - context: Runtime ``LambdaContext``. - /// - /// - Returns: An `EventLoopFuture` to report the result of the Lambda back to the runtime engine. - /// The `EventLoopFuture` should be completed with either a response encoded as `ByteBuffer` or an `Error`. - func handle(_ buffer: ByteBuffer, context: LambdaContext) -> EventLoopFuture -} - -extension ByteBufferLambdaHandler { - /// Initializes and runs the Lambda function. - /// - /// If you precede your ``ByteBufferLambdaHandler`` conformer's declaration with the - /// [@main](https://docs.swift.org/swift-book/ReferenceManual/Attributes.html#ID626) - /// attribute, the system calls the conformer's `main()` method to launch the lambda function. - /// - /// The lambda runtime provides a default implementation of the method that manages the launch - /// process. - public static func main() { - _ = Lambda.run(configuration: .init(), handlerType: Self.self) - } -} - -// MARK: - LambdaRuntimeHandler - -/// An `EventLoopFuture` based processing protocol for a Lambda that takes a `ByteBuffer` and returns -/// an optional `ByteBuffer` asynchronously. -/// -/// - note: This is a low level protocol designed to enable use cases where a frameworks initializes the -/// runtime with a handler outside the normal initialization of -/// ``ByteBufferLambdaHandler``, ``EventLoopLambdaHandler`` and ``LambdaHandler`` based APIs. -/// Most users are not expected to use this protocol. -public protocol LambdaRuntimeHandler { - /// The Lambda handling method. - /// Concrete Lambda handlers implement this method to provide the Lambda functionality. - /// - /// - parameters: - /// - buffer: The event or input payload encoded as `ByteBuffer`. - /// - context: Runtime ``LambdaContext``. - /// - /// - Returns: An `EventLoopFuture` to report the result of the Lambda back to the runtime engine. - /// The `EventLoopFuture` should be completed with either a response encoded as `ByteBuffer` or an `Error`. - func handle(_ buffer: ByteBuffer, context: LambdaContext) -> EventLoopFuture -} - -// MARK: - Other - -@usableFromInline -enum CodecError: Error { - case requestDecoding(Error) - case responseEncoding(Error) - case invalidString -} diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift b/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift deleted file mode 100644 index 6ecafa5a..00000000 --- a/Sources/AWSLambdaRuntimeCore/LambdaRunner.swift +++ /dev/null @@ -1,192 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2017-2018 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import Dispatch -import Logging -import NIOCore - -/// LambdaRunner manages the Lambda runtime workflow, or business logic. -final class LambdaRunner { - private let runtimeClient: LambdaRuntimeClient - private let eventLoop: EventLoop - private let allocator: ByteBufferAllocator - - private var isGettingNextInvocation = false - - init(eventLoop: EventLoop, configuration: LambdaConfiguration) { - self.eventLoop = eventLoop - self.runtimeClient = LambdaRuntimeClient(eventLoop: self.eventLoop, configuration: configuration.runtimeEngine) - self.allocator = ByteBufferAllocator() - } - - /// Run the user provided initializer. This *must* only be called once. - /// - /// - Returns: An `EventLoopFuture` fulfilled with the outcome of the initialization. - func initialize( - handlerProvider: @escaping (LambdaInitializationContext) -> EventLoopFuture, - logger: Logger, - terminator: LambdaTerminator - ) -> EventLoopFuture { - logger.debug("initializing lambda") - // 1. create the handler from the factory - // 2. report initialization error if one occurred - let context = LambdaInitializationContext( - logger: logger, - eventLoop: self.eventLoop, - allocator: self.allocator, - terminator: terminator - ) - - return handlerProvider(context) - // Hopping back to "our" EventLoop is important in case the factory returns a future - // that originated from a foreign EventLoop/EventLoopGroup. - // This can happen if the factory uses a library (let's say a database client) that manages its own threads/loops - // for whatever reason and returns a future that originated from that foreign EventLoop. - .hop(to: self.eventLoop) - .peekError { error in - self.runtimeClient.reportInitializationError(logger: logger, error: error).peekError { reportingError in - // We're going to bail out because the init failed, so there's not a lot we can do other than log - // that we couldn't report this error back to the runtime. - logger.error("failed reporting initialization error to lambda runtime engine: \(reportingError)") - } - } - } - - func run(handler: some LambdaRuntimeHandler, logger: Logger) -> EventLoopFuture { - logger.debug("lambda invocation sequence starting") - // 1. request invocation from lambda runtime engine - self.isGettingNextInvocation = true - return self.runtimeClient.getNextInvocation(logger: logger).peekError { error in - logger.debug("could not fetch work from lambda runtime engine: \(error)") - }.flatMap { invocation, bytes in - // 2. send invocation to handler - self.isGettingNextInvocation = false - let context = LambdaContext( - logger: logger, - eventLoop: self.eventLoop, - allocator: self.allocator, - invocation: invocation - ) - // when log level is trace or lower, print the first Kb of the payload - if logger.logLevel <= .trace, let buffer = bytes.getSlice(at: 0, length: max(bytes.readableBytes, 1024)) { - logger.trace( - "sending invocation to lambda handler", - metadata: ["1024 first bytes": .string(String(buffer: buffer))] - ) - } else { - logger.debug("sending invocation to lambda handler") - } - return handler.handle(bytes, context: context) - // Hopping back to "our" EventLoop is important in case the handler returns a future that - // originated from a foreign EventLoop/EventLoopGroup. - // This can happen if the handler uses a library (lets say a DB client) that manages its own threads/loops - // for whatever reason and returns a future that originated from that foreign EventLoop. - .hop(to: self.eventLoop) - .mapResult { result in - if case .failure(let error) = result { - logger.warning("lambda handler returned an error: \(error)") - } - return (invocation, result, context) - } - }.flatMap { invocation, result, context in - // 3. report results to runtime engine - self.runtimeClient.reportResults(logger: logger, invocation: invocation, result: result).peekError { - error in - logger.error("could not report results to lambda runtime engine: \(error)") - // To discuss: - // Do we want to await the tasks in this case? - let promise = context.eventLoop.makePromise(of: Void.self) - promise.completeWithTask { - try await context.tasks.awaitAll().get() - } - return promise.futureResult - }.map { _ in context } - } - .flatMap { (context: LambdaContext) -> EventLoopFuture in - let promise = context.eventLoop.makePromise(of: Void.self) - promise.completeWithTask { - try await context.tasks.awaitAll().get() - } - return promise.futureResult - } - } - - /// cancels the current run, if we are waiting for next invocation (long poll from Lambda control plane) - /// only needed for debugging purposes. - func cancelWaitingForNextInvocation() { - if self.isGettingNextInvocation { - self.runtimeClient.cancel() - } - } -} - -extension LambdaContext { - init(logger: Logger, eventLoop: EventLoop, allocator: ByteBufferAllocator, invocation: InvocationMetadata) { - self.init( - requestID: invocation.requestID, - traceID: invocation.traceID, - invokedFunctionARN: invocation.invokedFunctionARN, - deadline: DispatchWallTime(millisSinceEpoch: invocation.deadlineInMillisSinceEpoch), - cognitoIdentity: invocation.cognitoIdentity, - clientContext: invocation.clientContext, - logger: logger, - eventLoop: eventLoop, - allocator: allocator - ) - } -} - -// TODO: move to nio? -extension EventLoopFuture { - // callback does not have side effects, failing with original result - func peekError(_ callback: @escaping (Error) -> Void) -> EventLoopFuture { - self.flatMapError { error in - callback(error) - return self - } - } - - // callback does not have side effects, failing with original result - func peekError(_ callback: @escaping (Error) -> EventLoopFuture) -> EventLoopFuture { - self.flatMapError { error in - let promise = self.eventLoop.makePromise(of: Value.self) - callback(error).whenComplete { _ in - promise.completeWith(self) - } - return promise.futureResult - } - } - - func mapResult(_ callback: @escaping (Result) -> NewValue) -> EventLoopFuture { - self.map { value in - callback(.success(value)) - }.flatMapErrorThrowing { error in - callback(.failure(error)) - } - } -} - -extension Result { - private var successful: Bool { - switch self { - case .success: - return true - case .failure: - return false - } - } -} - -/// This is safe since lambda runtime synchronizes by dispatching all methods to a single `EventLoop` -extension LambdaRunner: @unchecked Sendable {} diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift deleted file mode 100644 index 7d9b6467..00000000 --- a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift +++ /dev/null @@ -1,352 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2017-2022 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import Logging -import NIOConcurrencyHelpers -import NIOCore - -/// `LambdaRuntime` manages the Lambda process lifecycle. -/// -/// Use this API, if you build a higher level web framework which shall be able to run inside the Lambda environment. -public final class LambdaRuntime { - private let eventLoop: EventLoop - private let shutdownPromise: EventLoopPromise - private let logger: Logger - private let configuration: LambdaConfiguration - - private let handlerProvider: (LambdaInitializationContext) -> EventLoopFuture - - private var state = State.idle { - willSet { - self.eventLoop.assertInEventLoop() - precondition(newValue.order > self.state.order, "invalid state \(newValue) after \(self.state.order)") - } - } - - /// Create a new `LambdaRuntime`. - /// - /// - parameters: - /// - handlerProvider: A provider of the ``Handler`` the `LambdaRuntime` will manage. - /// - eventLoop: An `EventLoop` to run the Lambda on. - /// - logger: A `Logger` to log the Lambda events. - @usableFromInline - convenience init( - handlerProvider: @escaping (LambdaInitializationContext) -> EventLoopFuture, - eventLoop: EventLoop, - logger: Logger - ) { - self.init( - handlerProvider: handlerProvider, - eventLoop: eventLoop, - logger: logger, - configuration: .init() - ) - } - - /// Create a new `LambdaRuntime`. - /// - /// - parameters: - /// - handlerProvider: A provider of the ``Handler`` the `LambdaRuntime` will manage. - /// - eventLoop: An `EventLoop` to run the Lambda on. - /// - logger: A `Logger` to log the Lambda events. - init( - handlerProvider: @escaping (LambdaInitializationContext) -> EventLoopFuture, - eventLoop: EventLoop, - logger: Logger, - configuration: LambdaConfiguration - ) { - self.eventLoop = eventLoop - self.shutdownPromise = eventLoop.makePromise(of: Int.self) - self.logger = logger - self.configuration = configuration - - self.handlerProvider = handlerProvider - } - - deinit { - guard case .shutdown = self.state else { - preconditionFailure("invalid state \(self.state)") - } - } - - /// The `Lifecycle` shutdown future. - /// - /// - Returns: An `EventLoopFuture` that is fulfilled after the Lambda lifecycle has fully shutdown. - public var shutdownFuture: EventLoopFuture { - self.shutdownPromise.futureResult - } - - /// Start the `LambdaRuntime`. - /// - /// - Returns: An `EventLoopFuture` that is fulfilled after the Lambda hander has been created and initialized, and a first run has been scheduled. - public func start() -> EventLoopFuture { - if self.eventLoop.inEventLoop { - return self._start() - } else { - return self.eventLoop.flatSubmit { self._start() } - } - } - - private func _start() -> EventLoopFuture { - // This method must be called on the `EventLoop` the `LambdaRuntime` has been initialized with. - self.eventLoop.assertInEventLoop() - - logger.info("lambda runtime starting with \(self.configuration)") - self.state = .initializing - - var logger = self.logger - logger[metadataKey: "lifecycleId"] = .string(self.configuration.lifecycle.id) - let terminator = LambdaTerminator() - let runner = LambdaRunner(eventLoop: self.eventLoop, configuration: self.configuration) - - let startupFuture = runner.initialize( - handlerProvider: self.handlerProvider, - logger: logger, - terminator: terminator - ) - startupFuture.flatMap { handler -> EventLoopFuture> in - // after the startup future has succeeded, we have a handler that we can use - // to `run` the lambda. - let finishedPromise = self.eventLoop.makePromise(of: Int.self) - self.state = .active(runner, handler) - self.run(promise: finishedPromise) - return finishedPromise.futureResult.mapResult { $0 } - }.flatMap { runnerResult -> EventLoopFuture in - // after the lambda finishPromise has succeeded or failed we need to - // shutdown the handler - terminator.terminate(eventLoop: self.eventLoop).flatMapErrorThrowing { error in - // if, we had an error shutting down the handler, we want to concatenate it with - // the runner result - logger.error("Error shutting down handler: \(error)") - throw LambdaRuntimeError.shutdownError(shutdownError: error, runnerResult: runnerResult) - }.flatMapResult { _ -> Result in - // we had no error shutting down the lambda. let's return the runner's result - runnerResult - } - }.always { _ in - // triggered when the Lambda has finished its last run or has a startup failure. - self.markShutdown() - }.cascade(to: self.shutdownPromise) - - return startupFuture.map { _ in } - } - - // MARK: - Private - - /// Begin the `LambdaRuntime` shutdown. - public func shutdown() { - // make this method thread safe by dispatching onto the eventloop - self.eventLoop.execute { - let oldState = self.state - self.state = .shuttingdown - if case .active(let runner, _) = oldState { - runner.cancelWaitingForNextInvocation() - } - } - } - - private func markShutdown() { - self.state = .shutdown - } - - @inline(__always) - private func run(promise: EventLoopPromise) { - func _run(_ count: Int) { - switch self.state { - case .active(let runner, let handler): - if self.configuration.lifecycle.maxTimes > 0, count >= self.configuration.lifecycle.maxTimes { - return promise.succeed(count) - } - var mlogger = self.logger - mlogger[metadataKey: "lifecycleIteration"] = "\(count)" - let logger = mlogger - runner.run(handler: handler, logger: logger).whenComplete { result in - switch result { - case .success: - logger.log(level: .debug, "lambda invocation sequence completed successfully") - // recursive! per aws lambda runtime spec the polling requests are to be done one at a time - _run(count + 1) - case .failure(HTTPClient.Errors.cancelled): - if case .shuttingdown = self.state { - // if we ware shutting down, we expect to that the get next - // invocation request might have been cancelled. For this reason we - // succeed the promise here. - logger.log(level: .info, "lambda invocation sequence has been cancelled for shutdown") - return promise.succeed(count) - } - logger.log(level: .error, "lambda invocation sequence has been cancelled unexpectedly") - promise.fail(HTTPClient.Errors.cancelled) - case .failure(let error): - logger.log(level: .error, "lambda invocation sequence completed with error: \(error)") - promise.fail(error) - } - } - case .shuttingdown: - promise.succeed(count) - default: - preconditionFailure("invalid run state: \(self.state)") - } - } - - _run(0) - } - - private enum State { - case idle - case initializing - case active(LambdaRunner, any LambdaRuntimeHandler) - case shuttingdown - case shutdown - - var order: Int { - switch self { - case .idle: - return 0 - case .initializing: - return 1 - case .active: - return 2 - case .shuttingdown: - return 3 - case .shutdown: - return 4 - } - } - } -} - -public enum LambdaRuntimeFactory { - /// Create a new `LambdaRuntime`. - /// - /// - parameters: - /// - handlerType: The ``SimpleLambdaHandler`` type the `LambdaRuntime` shall create and manage. - /// - eventLoop: An `EventLoop` to run the Lambda on. - /// - logger: A `Logger` to log the Lambda events. - @inlinable - public static func makeRuntime( - _ handlerType: Handler.Type, - eventLoop: any EventLoop, - logger: Logger - ) -> LambdaRuntime { - LambdaRuntime>( - handlerProvider: CodableSimpleLambdaHandler.makeHandler(context:), - eventLoop: eventLoop, - logger: logger - ) - } - - /// Create a new `LambdaRuntime`. - /// - /// - parameters: - /// - handlerType: The ``LambdaHandler`` type the `LambdaRuntime` shall create and manage. - /// - eventLoop: An `EventLoop` to run the Lambda on. - /// - logger: A `Logger` to log the Lambda events. - @inlinable - public static func makeRuntime( - _ handlerType: Handler.Type, - eventLoop: any EventLoop, - logger: Logger - ) -> LambdaRuntime { - LambdaRuntime>( - handlerProvider: CodableLambdaHandler.makeHandler(context:), - eventLoop: eventLoop, - logger: logger - ) - } - - /// Create a new `LambdaRuntime`. - /// - /// - parameters: - /// - handlerType: The ``EventLoopLambdaHandler`` type the `LambdaRuntime` shall create and manage. - /// - eventLoop: An `EventLoop` to run the Lambda on. - /// - logger: A `Logger` to log the Lambda events. - @inlinable - public static func makeRuntime( - _ handlerType: Handler.Type, - eventLoop: any EventLoop, - logger: Logger - ) -> LambdaRuntime { - LambdaRuntime>( - handlerProvider: CodableEventLoopLambdaHandler.makeHandler(context:), - eventLoop: eventLoop, - logger: logger - ) - } - - /// Create a new `LambdaRuntime`. - /// - /// - parameters: - /// - handlerType: The ``ByteBufferLambdaHandler`` type the `LambdaRuntime` shall create and manage. - /// - eventLoop: An `EventLoop` to run the Lambda on. - /// - logger: A `Logger` to log the Lambda events. - @inlinable - public static func makeRuntime( - _ handlerType: Handler.Type, - eventLoop: any EventLoop, - logger: Logger - ) -> LambdaRuntime { - LambdaRuntime( - handlerProvider: Handler.makeHandler(context:), - eventLoop: eventLoop, - logger: logger - ) - } - - /// Create a new `LambdaRuntime`. - /// - /// - parameters: - /// - handlerProvider: A provider of the ``LambdaRuntimeHandler`` the `LambdaRuntime` will manage. - /// - eventLoop: An `EventLoop` to run the Lambda on. - /// - logger: A `Logger` to log the Lambda events. - @inlinable - public static func makeRuntime( - handlerProvider: @escaping (LambdaInitializationContext) -> EventLoopFuture, - eventLoop: any EventLoop, - logger: Logger - ) -> LambdaRuntime { - LambdaRuntime( - handlerProvider: handlerProvider, - eventLoop: eventLoop, - logger: logger - ) - } - - /// Create a new `LambdaRuntime`. - /// - /// - parameters: - /// - handlerProvider: A provider of the ``LambdaRuntimeHandler`` the `LambdaRuntime` will manage. - /// - eventLoop: An `EventLoop` to run the Lambda on. - /// - logger: A `Logger` to log the Lambda events. - @inlinable - public static func makeRuntime( - handlerProvider: @escaping (LambdaInitializationContext) async throws -> Handler, - eventLoop: any EventLoop, - logger: Logger - ) -> LambdaRuntime { - LambdaRuntime( - handlerProvider: { context in - let promise = eventLoop.makePromise(of: Handler.self) - promise.completeWithTask { - try await handlerProvider(context) - } - return promise.futureResult - }, - eventLoop: eventLoop, - logger: logger - ) - } -} - -/// This is safe since lambda runtime synchronizes by dispatching all methods to a single `EventLoop` -extension LambdaRuntime: @unchecked Sendable {} diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift deleted file mode 100644 index 19b56c1f..00000000 --- a/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift +++ /dev/null @@ -1,155 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2017-2018 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import Logging -import NIOCore -import NIOHTTP1 - -/// An HTTP based client for AWS Runtime Engine. This encapsulates the RESTful methods exposed by the Runtime Engine: -/// * /runtime/invocation/next -/// * /runtime/invocation/response -/// * /runtime/invocation/error -/// * /runtime/init/error -struct LambdaRuntimeClient { - private let eventLoop: EventLoop - private let allocator = ByteBufferAllocator() - private let httpClient: HTTPClient - - init(eventLoop: EventLoop, configuration: LambdaConfiguration.RuntimeEngine) { - self.eventLoop = eventLoop - self.httpClient = HTTPClient(eventLoop: eventLoop, configuration: configuration) - } - - /// Requests invocation from the control plane. - func getNextInvocation(logger: Logger) -> EventLoopFuture<(InvocationMetadata, ByteBuffer)> { - let url = Consts.invocationURLPrefix + Consts.getNextInvocationURLSuffix - logger.debug("requesting work from lambda runtime engine using \(url)") - return self.httpClient.get(url: url, headers: LambdaRuntimeClient.defaultHeaders).flatMapThrowing { response in - guard response.status == .ok else { - throw LambdaRuntimeError.badStatusCode(response.status) - } - let invocation = try InvocationMetadata(headers: response.headers) - guard let event = response.body else { - throw LambdaRuntimeError.noBody - } - return (invocation, event) - }.flatMapErrorThrowing { error in - switch error { - case HTTPClient.Errors.timeout: - throw LambdaRuntimeError.upstreamError("timeout") - case HTTPClient.Errors.connectionResetByPeer: - throw LambdaRuntimeError.upstreamError("connectionResetByPeer") - default: - throw error - } - } - } - - /// Reports a result to the Runtime Engine. - func reportResults( - logger: Logger, - invocation: InvocationMetadata, - result: Result - ) -> EventLoopFuture { - var url = Consts.invocationURLPrefix + "/" + invocation.requestID - var body: ByteBuffer? - let headers: HTTPHeaders - - switch result { - case .success(let buffer): - url += Consts.postResponseURLSuffix - body = buffer - headers = LambdaRuntimeClient.defaultHeaders - case .failure(let error): - url += Consts.postErrorURLSuffix - let errorResponse = ErrorResponse(errorType: Consts.functionError, errorMessage: "\(error)") - let bytes = errorResponse.toJSONBytes() - body = self.allocator.buffer(capacity: bytes.count) - body!.writeBytes(bytes) - headers = LambdaRuntimeClient.errorHeaders - } - logger.debug("reporting results to lambda runtime engine using \(url)") - return self.httpClient.post(url: url, headers: headers, body: body).flatMapThrowing { response in - guard response.status == .accepted else { - throw LambdaRuntimeError.badStatusCode(response.status) - } - return () - }.flatMapErrorThrowing { error in - switch error { - case HTTPClient.Errors.timeout: - throw LambdaRuntimeError.upstreamError("timeout") - case HTTPClient.Errors.connectionResetByPeer: - throw LambdaRuntimeError.upstreamError("connectionResetByPeer") - default: - throw error - } - } - } - - /// Reports an initialization error to the Runtime Engine. - func reportInitializationError(logger: Logger, error: Error) -> EventLoopFuture { - let url = Consts.postInitErrorURL - let errorResponse = ErrorResponse(errorType: Consts.initializationError, errorMessage: "\(error)") - let bytes = errorResponse.toJSONBytes() - var body = self.allocator.buffer(capacity: bytes.count) - body.writeBytes(bytes) - logger.warning("reporting initialization error to lambda runtime engine using \(url)") - return self.httpClient.post(url: url, headers: LambdaRuntimeClient.errorHeaders, body: body).flatMapThrowing { - response in - guard response.status == .accepted else { - throw LambdaRuntimeError.badStatusCode(response.status) - } - return () - }.flatMapErrorThrowing { error in - switch error { - case HTTPClient.Errors.timeout: - throw LambdaRuntimeError.upstreamError("timeout") - case HTTPClient.Errors.connectionResetByPeer: - throw LambdaRuntimeError.upstreamError("connectionResetByPeer") - default: - throw error - } - } - } - - /// Cancels the current request, if one is running. Only needed for debugging purposes - func cancel() { - self.httpClient.cancel() - } -} - -enum LambdaRuntimeError: Error { - case badStatusCode(HTTPResponseStatus) - case upstreamError(String) - case invocationMissingHeader(String) - case noBody - case json(Error) - case shutdownError(shutdownError: Error, runnerResult: Result) -} - -extension LambdaRuntimeClient { - static let defaultHeaders = HTTPHeaders([("user-agent", "Swift-Lambda/Unknown")]) - - /// These headers must be sent along an invocation or initialization error report - static let errorHeaders: HTTPHeaders = [ - "user-agent": "Swift-Lambda/Unknown", - "lambda-runtime-function-error-type": "Unhandled", - ] - - /// These headers must be sent along an invocation or initialization error report - static let streamingHeaders: HTTPHeaders = [ - "user-agent": "Swift-Lambda/Unknown", - "transfer-encoding": "streaming", - ] -} diff --git a/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeClient.swift b/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeClient.swift index 71839163..98db7bf9 100644 --- a/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeClient.swift +++ b/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeClient.swift @@ -578,7 +578,7 @@ private final class LambdaChannelHandler version: .http1_1, method: .POST, uri: url, - headers: LambdaRuntimeClient.streamingHeaders + headers: NewLambdaRuntimeClient.streamingHeaders ) context.write(self.wrapOutboundOut(.head(httpRequest)), promise: nil) @@ -608,7 +608,7 @@ private final class LambdaChannelHandler "content-length": "\(byteBuffer?.readableBytes ?? 0)", ] } else { - LambdaRuntimeClient.streamingHeaders + NewLambdaRuntimeClient.streamingHeaders } let httpRequest = HTTPRequestHead( @@ -634,7 +634,7 @@ private final class LambdaChannelHandler version: .http1_1, method: .GET, uri: self.nextInvocationPath, - headers: LambdaRuntimeClient.defaultHeaders + headers: NewLambdaRuntimeClient.defaultHeaders ) context.write(self.wrapOutboundOut(.head(httpRequest)), promise: nil) @@ -650,7 +650,7 @@ private final class LambdaChannelHandler version: .http1_1, method: .POST, uri: url, - headers: LambdaRuntimeClient.errorHeaders + headers: NewLambdaRuntimeClient.errorHeaders ) if self.reusableErrorBuffer == nil { @@ -798,4 +798,21 @@ extension LambdaChannelHandler: ChannelInboundHandler { } } -private struct RequestCancelEvent {} +extension NewLambdaRuntimeClient { + static let defaultHeaders: HTTPHeaders = [ + "user-agent": "Swift-Lambda/Unknown" + ] + + /// These headers must be sent along an invocation or initialization error report + static let errorHeaders: HTTPHeaders = [ + "user-agent": "Swift-Lambda/Unknown", + "lambda-runtime-function-error-type": "Unhandled", + ] + + /// These headers must be sent along an invocation or initialization error report + static let streamingHeaders: HTTPHeaders = [ + "user-agent": "Swift-Lambda/Unknown", + "transfer-encoding": "streaming", + ] + +} diff --git a/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeError.swift b/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeError.swift index b95a5587..2468ef99 100644 --- a/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeError.swift +++ b/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeError.swift @@ -12,8 +12,8 @@ // //===----------------------------------------------------------------------===// -struct NewLambdaRuntimeError: Error { - enum Code { +package struct NewLambdaRuntimeError: Error { + package enum Code { case closingRuntimeClient case connectionToControlPlaneLost @@ -25,9 +25,18 @@ struct NewLambdaRuntimeError: Error { case lostConnectionToControlPlane case unexpectedStatusCodeForRequest + case nextInvocationMissingHeaderRequestID + case nextInvocationMissingHeaderDeadline + case nextInvocationMissingHeaderInvokeFuctionARN + + } + + package init(code: Code, underlying: (any Error)? = nil) { + self.code = code + self.underlying = underlying } - var code: Code - var underlying: (any Error)? + package var code: Code + package var underlying: (any Error)? } diff --git a/Sources/AWSLambdaRuntimeCore/Terminator.swift b/Sources/AWSLambdaRuntimeCore/Terminator.swift deleted file mode 100644 index 48f6b8e5..00000000 --- a/Sources/AWSLambdaRuntimeCore/Terminator.swift +++ /dev/null @@ -1,148 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2022 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import NIOConcurrencyHelpers -import NIOCore - -/// Lambda terminator. -/// Utility to manage the lambda shutdown sequence. -public final class LambdaTerminator { - fileprivate typealias Handler = (EventLoop) -> EventLoopFuture - - private var storage: Storage - - init() { - self.storage = Storage() - } - - /// Register a shutdown handler with the terminator. - /// - /// - parameters: - /// - name: Display name for logging purposes. - /// - handler: The shutdown handler to call when terminating the Lambda. - /// Shutdown handlers are called in the reverse order of being registered. - /// - /// - Returns: A ``RegistrationKey`` that can be used to de-register the handler when its no longer needed. - @discardableResult - public func register(name: String, handler: @escaping (EventLoop) -> EventLoopFuture) -> RegistrationKey { - let key = RegistrationKey() - self.storage.add(key: key, name: name, handler: handler) - return key - } - - /// De-register a shutdown handler with the terminator. - /// - /// - parameters: - /// - key: A ``RegistrationKey`` obtained from calling the register API. - public func deregister(_ key: RegistrationKey) { - self.storage.remove(key) - } - - /// Begin the termination cycle. - /// Shutdown handlers are called in the reverse order of being registered. - /// - /// - parameters: - /// - eventLoop: The `EventLoop` to run the termination on. - /// - /// - Returns: An `EventLoopFuture` with the result of the termination cycle. - func terminate(eventLoop: EventLoop) -> EventLoopFuture { - func terminate( - _ iterator: IndexingIterator<[(name: String, handler: Handler)]>, - errors: [Error], - promise: EventLoopPromise - ) { - var iterator = iterator - guard let handler = iterator.next()?.handler else { - if errors.isEmpty { - return promise.succeed(()) - } else { - return promise.fail(TerminationError(underlying: errors)) - } - } - handler(eventLoop).whenComplete { result in - var errors = errors - if case .failure(let error) = result { - errors.append(error) - } - return terminate(iterator, errors: errors, promise: promise) - } - } - - // terminate in cascading, reverse order - let promise = eventLoop.makePromise(of: Void.self) - terminate(self.storage.handlers.reversed().makeIterator(), errors: [], promise: promise) - return promise.futureResult - } -} - -extension LambdaTerminator { - /// Lambda terminator registration key. - public struct RegistrationKey: Hashable, CustomStringConvertible { - var value: String - - init() { - // UUID basically - self.value = LambdaRequestID().uuidString - } - - public var description: String { - self.value - } - } -} - -extension LambdaTerminator { - fileprivate final class Storage { - private let lock: NIOLock - private var index: [RegistrationKey] - private var map: [RegistrationKey: (name: String, handler: Handler)] - - init() { - self.lock = .init() - self.index = [] - self.map = [:] - } - - func add(key: RegistrationKey, name: String, handler: @escaping Handler) { - self.lock.withLock { - self.index.append(key) - self.map[key] = (name: name, handler: handler) - } - } - - func remove(_ key: RegistrationKey) { - self.lock.withLock { - self.index = self.index.filter { $0 != key } - self.map[key] = nil - } - } - - var handlers: [(name: String, handler: Handler)] { - self.lock.withLock { - self.index.compactMap { self.map[$0] } - } - } - } -} - -extension LambdaTerminator { - struct TerminationError: Error { - let underlying: [Error] - } -} - -// Ideally this would not be @unchecked Sendable, but Sendable checks do not understand locks -// We can transition this to an actor once we drop support for older Swift versions -extension LambdaTerminator: @unchecked Sendable {} -extension LambdaTerminator.Storage: @unchecked Sendable {} diff --git a/Sources/AWSLambdaTesting/Lambda+Testing.swift b/Sources/AWSLambdaTesting/Lambda+Testing.swift deleted file mode 100644 index 1545945e..00000000 --- a/Sources/AWSLambdaTesting/Lambda+Testing.swift +++ /dev/null @@ -1,131 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2020 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -// This functionality is designed to help with Lambda unit testing with XCTest -// For example: -// -// func test() { -// struct MyLambda: LambdaHandler { -// typealias Event = String -// typealias Output = String -// -// init(context: Lambda.InitializationContext) {} -// -// func handle(_ event: String, context: LambdaContext) async throws -> String { -// "echo" + event -// } -// } -// -// let input = UUID().uuidString -// var result: String? -// XCTAssertNoThrow(result = try Lambda.test(MyLambda.self, with: input)) -// XCTAssertEqual(result, "echo" + input) -// } - -import Dispatch -import Logging -import NIOCore -import NIOPosix - -@testable import AWSLambdaRuntime -@testable import AWSLambdaRuntimeCore - -extension Lambda { - public struct TestConfig { - public var requestID: String - public var traceID: String - public var invokedFunctionARN: String - public var timeout: DispatchTimeInterval - - public init( - requestID: String = "\(DispatchTime.now().uptimeNanoseconds)", - traceID: String = - "Root=\(DispatchTime.now().uptimeNanoseconds);Parent=\(DispatchTime.now().uptimeNanoseconds);Sampled=1", - invokedFunctionARN: String = - "arn:aws:lambda:us-west-1:\(DispatchTime.now().uptimeNanoseconds):function:custom-runtime", - timeout: DispatchTimeInterval = .seconds(5) - ) { - self.requestID = requestID - self.traceID = traceID - self.invokedFunctionARN = invokedFunctionARN - self.timeout = timeout - } - } - - public static func test( - _ handlerType: Handler.Type, - with event: Handler.Event, - using config: TestConfig = .init() - ) async throws -> Handler.Output { - let context = Self.makeContext(config: config) - let handler = Handler() - return try await handler.handle(event, context: context.1) - } - - public static func test( - _ handlerType: Handler.Type, - with event: Handler.Event, - using config: TestConfig = .init() - ) async throws -> Handler.Output { - let context = Self.makeContext(config: config) - let handler = try await Handler(context: context.0) - return try await handler.handle(event, context: context.1) - } - - public static func test( - _ handlerType: Handler.Type, - with event: Handler.Event, - using config: TestConfig = .init() - ) async throws -> Handler.Output { - let context = Self.makeContext(config: config) - let handler = try await Handler.makeHandler(context: context.0).get() - return try await handler.handle(event, context: context.1).get() - } - - public static func test( - _ handlerType: Handler.Type, - with buffer: ByteBuffer, - using config: TestConfig = .init() - ) async throws -> ByteBuffer? { - let context = Self.makeContext(config: config) - let handler = try await Handler.makeHandler(context: context.0).get() - return try await handler.handle(buffer, context: context.1).get() - } - - private static func makeContext(config: TestConfig) -> (LambdaInitializationContext, LambdaContext) { - let logger = Logger(label: "test") - - let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) - defer { - try! eventLoopGroup.syncShutdownGracefully() - } - let eventLoop = eventLoopGroup.next() - - let initContext = LambdaInitializationContext.__forTestsOnly( - logger: logger, - eventLoop: eventLoop - ) - - let context = LambdaContext.__forTestsOnly( - requestID: config.requestID, - traceID: config.traceID, - invokedFunctionARN: config.invokedFunctionARN, - timeout: config.timeout, - logger: logger, - eventLoop: eventLoop - ) - - return (initContext, context) - } -} diff --git a/Sources/AWSLambdaTesting/LambdaTestRuntime.swift b/Sources/AWSLambdaTesting/LambdaTestRuntime.swift new file mode 100644 index 00000000..6fba9656 --- /dev/null +++ b/Sources/AWSLambdaTesting/LambdaTestRuntime.swift @@ -0,0 +1,17 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2020 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import Logging +import NIOCore +import NIOPosix diff --git a/Tests/AWSLambdaRuntimeCoreTests/DetachedTasksTests.swift b/Tests/AWSLambdaRuntimeCoreTests/DetachedTasksTests.swift deleted file mode 100644 index 1c5f2e30..00000000 --- a/Tests/AWSLambdaRuntimeCoreTests/DetachedTasksTests.swift +++ /dev/null @@ -1,80 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2017-2018 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import Logging -import NIO -import XCTest - -@testable import AWSLambdaRuntimeCore - -class DetachedTasksTest: XCTestCase { - actor Expectation { - var isFulfilled = false - func fulfill() { - self.isFulfilled = true - } - } - - func testAwaitTasks() async throws { - let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) - defer { XCTAssertNoThrow(try eventLoopGroup.syncShutdownGracefully()) } - - let context = DetachedTasksContainer.Context( - eventLoop: eventLoopGroup.next(), - logger: Logger(label: "test") - ) - let expectation = Expectation() - - let container = DetachedTasksContainer(context: context) - await container.detached { - try! await Task.sleep(for: .milliseconds(200)) - await expectation.fulfill() - } - - try await container.awaitAll().get() - let isFulfilled = await expectation.isFulfilled - XCTAssert(isFulfilled) - } - - func testAwaitChildrenTasks() async throws { - let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) - defer { XCTAssertNoThrow(try eventLoopGroup.syncShutdownGracefully()) } - - let context = DetachedTasksContainer.Context( - eventLoop: eventLoopGroup.next(), - logger: Logger(label: "test") - ) - let expectation1 = Expectation() - let expectation2 = Expectation() - - let container = DetachedTasksContainer(context: context) - await container.detached { - await container.detached { - try! await Task.sleep(for: .milliseconds(300)) - await expectation1.fulfill() - } - try! await Task.sleep(for: .milliseconds(200)) - await container.detached { - try! await Task.sleep(for: .milliseconds(100)) - await expectation2.fulfill() - } - } - - try await container.awaitAll().get() - let isFulfilled1 = await expectation1.isFulfilled - let isFulfilled2 = await expectation2.isFulfilled - XCTAssert(isFulfilled1) - XCTAssert(isFulfilled2) - } -} diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaHandlerTest.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaHandlerTest.swift deleted file mode 100644 index 7ba88ed1..00000000 --- a/Tests/AWSLambdaRuntimeCoreTests/LambdaHandlerTest.swift +++ /dev/null @@ -1,352 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2017-2018 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import NIOCore -import XCTest - -@testable import AWSLambdaRuntimeCore - -class LambdaHandlerTest: XCTestCase { - // MARK: - SimpleLambdaHandler - - func testBootstrapSimpleNoInit() { - let server = MockLambdaServer(behavior: Behavior()) - var port: Int? - XCTAssertNoThrow(port = try server.start().wait()) - guard let port else { return XCTFail("Expected the server to have started") } - defer { XCTAssertNoThrow(try server.stop().wait()) } - - struct TestBootstrapHandler: SimpleLambdaHandler { - func handle(_ event: String, context: LambdaContext) async throws -> String { - event - } - } - - let maxTimes = Int.random(in: 10...20) - let configuration = LambdaConfiguration( - lifecycle: .init(maxTimes: maxTimes), - runtimeEngine: .init(address: "127.0.0.1:\(port)") - ) - let result = Lambda.run(configuration: configuration, handlerType: TestBootstrapHandler.self) - assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) - } - - func testBootstrapSimpleInit() { - let server = MockLambdaServer(behavior: Behavior()) - var port: Int? - XCTAssertNoThrow(port = try server.start().wait()) - guard let port else { return XCTFail("Expected the server to have started") } - defer { XCTAssertNoThrow(try server.stop().wait()) } - - struct TestBootstrapHandler: SimpleLambdaHandler { - var initialized = false - - init() { - XCTAssertFalse(self.initialized) - self.initialized = true - } - - func handle(_ event: String, context: LambdaContext) async throws -> String { - event - } - } - - let maxTimes = Int.random(in: 10...20) - let configuration = LambdaConfiguration( - lifecycle: .init(maxTimes: maxTimes), - runtimeEngine: .init(address: "127.0.0.1:\(port)") - ) - let result = Lambda.run(configuration: configuration, handlerType: TestBootstrapHandler.self) - assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) - } - - // MARK: - LambdaHandler - - func testBootstrapSuccess() { - let server = MockLambdaServer(behavior: Behavior()) - var port: Int? - XCTAssertNoThrow(port = try server.start().wait()) - guard let port else { return XCTFail("Expected the server to have started") } - defer { XCTAssertNoThrow(try server.stop().wait()) } - - struct TestBootstrapHandler: LambdaHandler { - var initialized = false - - init(context: LambdaInitializationContext) async throws { - XCTAssertFalse(self.initialized) - try await Task.sleep(nanoseconds: 100 * 1000 * 1000) // 0.1 seconds - self.initialized = true - } - - func handle(_ event: String, context: LambdaContext) async throws -> String { - event - } - } - - let maxTimes = Int.random(in: 10...20) - let configuration = LambdaConfiguration( - lifecycle: .init(maxTimes: maxTimes), - runtimeEngine: .init(address: "127.0.0.1:\(port)") - ) - let result = Lambda.run(configuration: configuration, handlerType: TestBootstrapHandler.self) - assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) - } - - func testBootstrapFailure() { - let server = MockLambdaServer(behavior: FailedBootstrapBehavior()) - var port: Int? - XCTAssertNoThrow(port = try server.start().wait()) - guard let port else { return XCTFail("Expected the server to have started") } - defer { XCTAssertNoThrow(try server.stop().wait()) } - - struct TestBootstrapHandler: LambdaHandler { - var initialized = false - - init(context: LambdaInitializationContext) async throws { - XCTAssertFalse(self.initialized) - try await Task.sleep(nanoseconds: 100 * 1000 * 1000) // 0.1 seconds - throw TestError("kaboom") - } - - func handle(_ event: String, context: LambdaContext) async throws { - XCTFail("How can this be called if init failed") - } - } - - let maxTimes = Int.random(in: 10...20) - let configuration = LambdaConfiguration( - lifecycle: .init(maxTimes: maxTimes), - runtimeEngine: .init(address: "127.0.0.1:\(port)") - ) - let result = Lambda.run(configuration: configuration, handlerType: TestBootstrapHandler.self) - assertLambdaRuntimeResult(result, shouldFailWithError: TestError("kaboom")) - } - - func testHandlerSuccess() { - let server = MockLambdaServer(behavior: Behavior()) - var port: Int? - XCTAssertNoThrow(port = try server.start().wait()) - guard let port else { return XCTFail("Expected the server to have started") } - defer { XCTAssertNoThrow(try server.stop().wait()) } - - struct Handler: SimpleLambdaHandler { - func handle(_ event: String, context: LambdaContext) async throws -> String { - event - } - } - - let maxTimes = Int.random(in: 1...10) - let configuration = LambdaConfiguration( - lifecycle: .init(maxTimes: maxTimes), - runtimeEngine: .init(address: "127.0.0.1:\(port)") - ) - let result = Lambda.run(configuration: configuration, handlerType: Handler.self) - assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) - } - - func testVoidHandlerSuccess() { - let server = MockLambdaServer(behavior: Behavior(result: .success(nil))) - var port: Int? - XCTAssertNoThrow(port = try server.start().wait()) - guard let port else { return XCTFail("Expected the server to have started") } - defer { XCTAssertNoThrow(try server.stop().wait()) } - - struct Handler: SimpleLambdaHandler { - func handle(_ event: String, context: LambdaContext) async throws {} - } - - let maxTimes = Int.random(in: 1...10) - let configuration = LambdaConfiguration( - lifecycle: .init(maxTimes: maxTimes), - runtimeEngine: .init(address: "127.0.0.1:\(port)") - ) - - let result = Lambda.run(configuration: configuration, handlerType: Handler.self) - assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) - } - - func testHandlerFailure() { - let server = MockLambdaServer(behavior: Behavior(result: .failure(TestError("boom")))) - var port: Int? - XCTAssertNoThrow(port = try server.start().wait()) - guard let port else { return XCTFail("Expected the server to have started") } - defer { XCTAssertNoThrow(try server.stop().wait()) } - - struct Handler: SimpleLambdaHandler { - func handle(_ event: String, context: LambdaContext) async throws -> String { - throw TestError("boom") - } - } - - let maxTimes = Int.random(in: 1...10) - let configuration = LambdaConfiguration( - lifecycle: .init(maxTimes: maxTimes), - runtimeEngine: .init(address: "127.0.0.1:\(port)") - ) - let result = Lambda.run(configuration: configuration, handlerType: Handler.self) - assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) - } - - // MARK: - EventLoopLambdaHandler - - func testEventLoopSuccess() { - let server = MockLambdaServer(behavior: Behavior()) - var port: Int? - XCTAssertNoThrow(port = try server.start().wait()) - guard let port else { return XCTFail("Expected the server to have started") } - defer { XCTAssertNoThrow(try server.stop().wait()) } - - struct Handler: EventLoopLambdaHandler { - static func makeHandler(context: LambdaInitializationContext) -> EventLoopFuture { - context.eventLoop.makeSucceededFuture(Handler()) - } - - func handle(_ event: String, context: LambdaContext) -> EventLoopFuture { - context.eventLoop.makeSucceededFuture(event) - } - } - - let maxTimes = Int.random(in: 1...10) - let configuration = LambdaConfiguration( - lifecycle: .init(maxTimes: maxTimes), - runtimeEngine: .init(address: "127.0.0.1:\(port)") - ) - let result = Lambda.run(configuration: configuration, handlerType: Handler.self) - assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) - } - - func testVoidEventLoopSuccess() { - let server = MockLambdaServer(behavior: Behavior(result: .success(nil))) - var port: Int? - XCTAssertNoThrow(port = try server.start().wait()) - guard let port else { return XCTFail("Expected the server to have started") } - defer { XCTAssertNoThrow(try server.stop().wait()) } - - struct Handler: EventLoopLambdaHandler { - static func makeHandler(context: LambdaInitializationContext) -> EventLoopFuture { - context.eventLoop.makeSucceededFuture(Handler()) - } - - func handle(_ event: String, context: LambdaContext) -> EventLoopFuture { - context.eventLoop.makeSucceededFuture(()) - } - } - - let maxTimes = Int.random(in: 1...10) - let configuration = LambdaConfiguration( - lifecycle: .init(maxTimes: maxTimes), - runtimeEngine: .init(address: "127.0.0.1:\(port)") - ) - let result = Lambda.run(configuration: configuration, handlerType: Handler.self) - assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) - } - - func testEventLoopFailure() { - let server = MockLambdaServer(behavior: Behavior(result: .failure(TestError("boom")))) - var port: Int? - XCTAssertNoThrow(port = try server.start().wait()) - guard let port else { return XCTFail("Expected the server to have started") } - defer { XCTAssertNoThrow(try server.stop().wait()) } - - struct Handler: EventLoopLambdaHandler { - static func makeHandler(context: LambdaInitializationContext) -> EventLoopFuture { - context.eventLoop.makeSucceededFuture(Handler()) - } - - func handle(_ event: String, context: LambdaContext) -> EventLoopFuture { - context.eventLoop.makeFailedFuture(TestError("boom")) - } - } - - let maxTimes = Int.random(in: 1...10) - let configuration = LambdaConfiguration( - lifecycle: .init(maxTimes: maxTimes), - runtimeEngine: .init(address: "127.0.0.1:\(port)") - ) - let result = Lambda.run(configuration: configuration, handlerType: Handler.self) - assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) - } - - func testEventLoopBootstrapFailure() { - let server = MockLambdaServer(behavior: FailedBootstrapBehavior()) - var port: Int? - XCTAssertNoThrow(port = try server.start().wait()) - guard let port else { return XCTFail("Expected the server to have started") } - defer { XCTAssertNoThrow(try server.stop().wait()) } - - struct Handler: EventLoopLambdaHandler { - static func makeHandler(context: LambdaInitializationContext) -> EventLoopFuture { - context.eventLoop.makeFailedFuture(TestError("kaboom")) - } - - func handle(_ event: String, context: LambdaContext) -> EventLoopFuture { - XCTFail("Must never be called") - return context.eventLoop.makeFailedFuture(TestError("boom")) - } - } - - let configuration = LambdaConfiguration(runtimeEngine: .init(address: "127.0.0.1:\(port)")) - let result = Lambda.run(configuration: configuration, handlerType: Handler.self) - assertLambdaRuntimeResult(result, shouldFailWithError: TestError("kaboom")) - } -} - -private struct Behavior: LambdaServerBehavior { - let requestId: String - let event: String - let result: Result - - init( - requestId: String = UUID().uuidString, - event: String = "hello", - result: Result = .success("hello") - ) { - self.requestId = requestId - self.event = event - self.result = result - } - - func getInvocation() -> GetInvocationResult { - .success((requestId: self.requestId, event: self.event)) - } - - func processResponse(requestId: String, response: String?) -> Result { - XCTAssertEqual(self.requestId, requestId, "expecting requestId to match") - switch self.result { - case .success(let expected): - XCTAssertEqual(expected, response, "expecting response to match") - return .success(()) - case .failure: - XCTFail("unexpected to fail, but succeeded with: \(response ?? "undefined")") - return .failure(.internalServerError) - } - } - - func processError(requestId: String, error: ErrorResponse) -> Result { - XCTAssertEqual(self.requestId, requestId, "expecting requestId to match") - switch self.result { - case .success: - XCTFail("unexpected to succeed, but failed with: \(error)") - return .failure(.internalServerError) - case .failure(let expected): - XCTAssertEqual(expected.description, error.errorMessage, "expecting error to match") - return .success(()) - } - } - - func processInitError(error: ErrorResponse) -> Result { - XCTFail("should not report init error") - return .failure(.internalServerError) - } -} diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaHandlers.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaHandlers.swift deleted file mode 100644 index dd371238..00000000 --- a/Tests/AWSLambdaRuntimeCoreTests/LambdaHandlers.swift +++ /dev/null @@ -1,52 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2017-2018 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import AWSLambdaRuntimeCore -import NIOCore -import XCTest - -struct EchoHandler: EventLoopLambdaHandler { - static func makeHandler(context: LambdaInitializationContext) -> EventLoopFuture { - context.eventLoop.makeSucceededFuture(EchoHandler()) - } - - func handle(_ event: String, context: LambdaContext) -> EventLoopFuture { - context.eventLoop.makeSucceededFuture(event) - } -} - -struct StartupError: Error {} - -struct StartupErrorHandler: EventLoopLambdaHandler { - static func makeHandler(context: LambdaInitializationContext) -> EventLoopFuture { - context.eventLoop.makeFailedFuture(StartupError()) - } - - func handle(_ event: String, context: LambdaContext) -> EventLoopFuture { - XCTFail("Must never be called") - return context.eventLoop.makeSucceededFuture(event) - } -} - -struct RuntimeError: Error {} - -struct RuntimeErrorHandler: EventLoopLambdaHandler { - static func makeHandler(context: LambdaInitializationContext) -> EventLoopFuture { - context.eventLoop.makeSucceededFuture(RuntimeErrorHandler()) - } - - func handle(_ event: String, context: LambdaContext) -> EventLoopFuture { - context.eventLoop.makeFailedFuture(RuntimeError()) - } -} diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaRunnerTest.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaRunnerTest.swift deleted file mode 100644 index a057a2b9..00000000 --- a/Tests/AWSLambdaRuntimeCoreTests/LambdaRunnerTest.swift +++ /dev/null @@ -1,217 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2017-2018 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import NIOCore -import XCTest - -@testable import AWSLambdaRuntimeCore - -class LambdaRunnerTest: XCTestCase { - func testSuccess() { - struct Behavior: LambdaServerBehavior { - let requestId = UUID().uuidString - let event = "hello" - func getInvocation() -> GetInvocationResult { - .success((self.requestId, self.event)) - } - - func processResponse(requestId: String, response: String?) -> Result { - XCTAssertEqual(self.requestId, requestId, "expecting requestId to match") - XCTAssertEqual(self.event, response, "expecting response to match") - return .success(()) - } - - func processError(requestId: String, error: ErrorResponse) -> Result { - XCTFail("should not report error") - return .failure(.internalServerError) - } - - func processInitError(error: ErrorResponse) -> Result { - XCTFail("should not report init error") - return .failure(.internalServerError) - } - } - XCTAssertNoThrow(try runLambda(behavior: Behavior(), handlerType: EchoHandler.self)) - } - - func testFailure() { - struct Behavior: LambdaServerBehavior { - let requestId = UUID().uuidString - func getInvocation() -> GetInvocationResult { - .success((requestId: self.requestId, event: "hello")) - } - - func processResponse(requestId: String, response: String?) -> Result { - XCTFail("should report error") - return .failure(.internalServerError) - } - - func processError(requestId: String, error: ErrorResponse) -> Result { - XCTAssertEqual(self.requestId, requestId, "expecting requestId to match") - XCTAssertEqual(String(describing: RuntimeError()), error.errorMessage, "expecting error to match") - return .success(()) - } - - func processInitError(error: ErrorResponse) -> Result { - XCTFail("should not report init error") - return .failure(.internalServerError) - } - } - XCTAssertNoThrow(try runLambda(behavior: Behavior(), handlerType: RuntimeErrorHandler.self)) - } - - func testCustomProviderSuccess() { - struct Behavior: LambdaServerBehavior { - let requestId = UUID().uuidString - let event = "hello" - func getInvocation() -> GetInvocationResult { - .success((self.requestId, self.event)) - } - - func processResponse(requestId: String, response: String?) -> Result { - XCTAssertEqual(self.requestId, requestId, "expecting requestId to match") - XCTAssertEqual(self.event, response, "expecting response to match") - return .success(()) - } - - func processError(requestId: String, error: ErrorResponse) -> Result { - XCTFail("should not report error") - return .failure(.internalServerError) - } - - func processInitError(error: ErrorResponse) -> Result { - XCTFail("should not report init error") - return .failure(.internalServerError) - } - } - XCTAssertNoThrow( - try runLambda( - behavior: Behavior(), - handlerProvider: { context in - context.eventLoop.makeSucceededFuture(EchoHandler()) - } - ) - ) - } - - func testCustomProviderFailure() { - struct Behavior: LambdaServerBehavior { - let requestId = UUID().uuidString - let event = "hello" - func getInvocation() -> GetInvocationResult { - .success((self.requestId, self.event)) - } - - func processResponse(requestId: String, response: String?) -> Result { - XCTFail("should not report processing") - return .failure(.internalServerError) - } - - func processError(requestId: String, error: ErrorResponse) -> Result { - XCTFail("should not report error") - return .failure(.internalServerError) - } - - func processInitError(error: ErrorResponse) -> Result { - XCTAssertEqual(String(describing: CustomError()), error.errorMessage, "expecting error to match") - return .success(()) - } - } - - struct CustomError: Error {} - - XCTAssertThrowsError( - try runLambda( - behavior: Behavior(), - handlerProvider: { context -> EventLoopFuture in - context.eventLoop.makeFailedFuture(CustomError()) - } - ) - ) { error in - XCTAssertNotNil(error as? CustomError, "expecting error to match") - } - } - - func testCustomAsyncProviderSuccess() { - struct Behavior: LambdaServerBehavior { - let requestId = UUID().uuidString - let event = "hello" - func getInvocation() -> GetInvocationResult { - .success((self.requestId, self.event)) - } - - func processResponse(requestId: String, response: String?) -> Result { - XCTAssertEqual(self.requestId, requestId, "expecting requestId to match") - XCTAssertEqual(self.event, response, "expecting response to match") - return .success(()) - } - - func processError(requestId: String, error: ErrorResponse) -> Result { - XCTFail("should not report error") - return .failure(.internalServerError) - } - - func processInitError(error: ErrorResponse) -> Result { - XCTFail("should not report init error") - return .failure(.internalServerError) - } - } - XCTAssertNoThrow( - try runLambda( - behavior: Behavior(), - handlerProvider: { _ async throws -> EchoHandler in - EchoHandler() - } - ) - ) - } - - func testCustomAsyncProviderFailure() { - struct Behavior: LambdaServerBehavior { - let requestId = UUID().uuidString - let event = "hello" - func getInvocation() -> GetInvocationResult { - .success((self.requestId, self.event)) - } - - func processResponse(requestId: String, response: String?) -> Result { - XCTFail("should not report processing") - return .failure(.internalServerError) - } - - func processError(requestId: String, error: ErrorResponse) -> Result { - XCTFail("should not report error") - return .failure(.internalServerError) - } - - func processInitError(error: ErrorResponse) -> Result { - XCTAssertEqual(String(describing: CustomError()), error.errorMessage, "expecting error to match") - return .success(()) - } - } - - struct CustomError: Error {} - - XCTAssertThrowsError( - try runLambda( - behavior: Behavior(), - handlerProvider: { _ async throws -> EchoHandler in - throw CustomError() - } - ) - ) { error in - XCTAssertNotNil(error as? CustomError, "expecting error to match") - } - } -} diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeClientTest.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeClientTest.swift deleted file mode 100644 index 749f1c64..00000000 --- a/Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeClientTest.swift +++ /dev/null @@ -1,380 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2017-2018 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import Logging -import NIOCore -import NIOFoundationCompat -import NIOHTTP1 -import NIOPosix -import NIOTestUtils -import XCTest - -@testable import AWSLambdaRuntimeCore - -class LambdaRuntimeClientTest: XCTestCase { - func testSuccess() { - let behavior = Behavior() - XCTAssertNoThrow(try runLambda(behavior: behavior, handlerType: EchoHandler.self)) - XCTAssertEqual(behavior.state, 6) - } - - func testFailure() { - let behavior = Behavior() - XCTAssertNoThrow(try runLambda(behavior: behavior, handlerType: RuntimeErrorHandler.self)) - XCTAssertEqual(behavior.state, 10) - } - - func testStartupFailure() { - let behavior = Behavior() - XCTAssertThrowsError(try runLambda(behavior: behavior, handlerType: StartupErrorHandler.self)) { - XCTAssert($0 is StartupError) - } - XCTAssertEqual(behavior.state, 1) - } - - func testGetInvocationServerInternalError() { - struct Behavior: LambdaServerBehavior { - func getInvocation() -> GetInvocationResult { - .failure(.internalServerError) - } - - func processResponse(requestId: String, response: String?) -> Result { - XCTFail("should not report results") - return .failure(.internalServerError) - } - - func processError(requestId: String, error: ErrorResponse) -> Result { - XCTFail("should not report error") - return .failure(.internalServerError) - } - - func processInitError(error: ErrorResponse) -> Result { - XCTFail("should not report init error") - return .failure(.internalServerError) - } - } - XCTAssertThrowsError(try runLambda(behavior: Behavior(), handlerType: EchoHandler.self)) { - XCTAssertEqual($0 as? LambdaRuntimeError, .badStatusCode(.internalServerError)) - } - } - - func testGetInvocationServerNoBodyError() { - struct Behavior: LambdaServerBehavior { - func getInvocation() -> GetInvocationResult { - .success(("1", "")) - } - - func processResponse(requestId: String, response: String?) -> Result { - XCTFail("should not report results") - return .failure(.internalServerError) - } - - func processError(requestId: String, error: ErrorResponse) -> Result { - XCTFail("should not report error") - return .failure(.internalServerError) - } - - func processInitError(error: ErrorResponse) -> Result { - XCTFail("should not report init error") - return .failure(.internalServerError) - } - } - XCTAssertThrowsError(try runLambda(behavior: Behavior(), handlerType: EchoHandler.self)) { - XCTAssertEqual($0 as? LambdaRuntimeError, .noBody) - } - } - - func testGetInvocationServerMissingHeaderRequestIDError() { - struct Behavior: LambdaServerBehavior { - func getInvocation() -> GetInvocationResult { - // no request id -> no context - .success(("", "hello")) - } - - func processResponse(requestId: String, response: String?) -> Result { - XCTFail("should not report results") - return .failure(.internalServerError) - } - - func processError(requestId: String, error: ErrorResponse) -> Result { - XCTFail("should not report error") - return .failure(.internalServerError) - } - - func processInitError(error: ErrorResponse) -> Result { - XCTFail("should not report init error") - return .failure(.internalServerError) - } - } - XCTAssertThrowsError(try runLambda(behavior: Behavior(), handlerType: EchoHandler.self)) { - XCTAssertEqual($0 as? LambdaRuntimeError, .invocationMissingHeader(AmazonHeaders.requestID)) - } - } - - func testProcessResponseInternalServerError() { - struct Behavior: LambdaServerBehavior { - func getInvocation() -> GetInvocationResult { - .success((requestId: "1", event: "event")) - } - - func processResponse(requestId: String, response: String?) -> Result { - .failure(.internalServerError) - } - - func processError(requestId: String, error: ErrorResponse) -> Result { - XCTFail("should not report error") - return .failure(.internalServerError) - } - - func processInitError(error: ErrorResponse) -> Result { - XCTFail("should not report init error") - return .failure(.internalServerError) - } - } - XCTAssertThrowsError(try runLambda(behavior: Behavior(), handlerType: EchoHandler.self)) { - XCTAssertEqual($0 as? LambdaRuntimeError, .badStatusCode(.internalServerError)) - } - } - - func testProcessErrorInternalServerError() { - struct Behavior: LambdaServerBehavior { - func getInvocation() -> GetInvocationResult { - .success((requestId: "1", event: "event")) - } - - func processResponse(requestId: String, response: String?) -> Result { - XCTFail("should not report results") - return .failure(.internalServerError) - } - - func processError(requestId: String, error: ErrorResponse) -> Result { - .failure(.internalServerError) - } - - func processInitError(error: ErrorResponse) -> Result { - XCTFail("should not report init error") - return .failure(.internalServerError) - } - } - XCTAssertThrowsError(try runLambda(behavior: Behavior(), handlerType: RuntimeErrorHandler.self)) { - XCTAssertEqual($0 as? LambdaRuntimeError, .badStatusCode(.internalServerError)) - } - } - - func testProcessInitErrorOnBootstrapFailure() { - struct Behavior: LambdaServerBehavior { - func getInvocation() -> GetInvocationResult { - XCTFail("should not get invocation") - return .failure(.internalServerError) - } - - func processResponse(requestId: String, response: String?) -> Result { - XCTFail("should not report results") - return .failure(.internalServerError) - } - - func processError(requestId: String, error: ErrorResponse) -> Result { - XCTFail("should not report error") - return .failure(.internalServerError) - } - - func processInitError(error: ErrorResponse) -> Result { - .failure(.internalServerError) - } - } - XCTAssertThrowsError(try runLambda(behavior: Behavior(), handlerType: StartupErrorHandler.self)) { - XCTAssert($0 is StartupError) - } - } - - func testErrorResponseToJSON() { - // we want to check if quotes and back slashes are correctly escaped - let windowsError = ErrorResponse( - errorType: "error", - errorMessage: #"underlyingError: "An error with a windows path C:\Windows\""# - ) - let windowsBytes = windowsError.toJSONBytes() - XCTAssertEqual( - #"{"errorType":"error","errorMessage":"underlyingError: \"An error with a windows path C:\\Windows\\\""}"#, - String(decoding: windowsBytes, as: Unicode.UTF8.self) - ) - - // we want to check if unicode sequences work - let emojiError = ErrorResponse( - errorType: "error", - errorMessage: #"🥑👨‍👩‍👧‍👧👩‍👩‍👧‍👧👨‍👨‍👧"# - ) - let emojiBytes = emojiError.toJSONBytes() - XCTAssertEqual( - #"{"errorType":"error","errorMessage":"🥑👨‍👩‍👧‍👧👩‍👩‍👧‍👧👨‍👨‍👧"}"#, - String(decoding: emojiBytes, as: Unicode.UTF8.self) - ) - } - - func testInitializationErrorReport() { - let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) - defer { XCTAssertNoThrow(try eventLoopGroup.syncShutdownGracefully()) } - - let server = NIOHTTP1TestServer(group: eventLoopGroup) - defer { XCTAssertNoThrow(try server.stop()) } - - let logger = Logger(label: "TestLogger") - let client = LambdaRuntimeClient( - eventLoop: eventLoopGroup.next(), - configuration: .init(address: "127.0.0.1:\(server.serverPort)") - ) - let result = client.reportInitializationError(logger: logger, error: TestError("boom")) - - var inboundHeader: HTTPServerRequestPart? - XCTAssertNoThrow(inboundHeader = try server.readInbound()) - guard case .head(let head) = try? XCTUnwrap(inboundHeader) else { - XCTFail("Expected to get a head first") - return - } - XCTAssertEqual(head.headers["lambda-runtime-function-error-type"], ["Unhandled"]) - XCTAssertEqual(head.headers["user-agent"], ["Swift-Lambda/Unknown"]) - - var inboundBody: HTTPServerRequestPart? - XCTAssertNoThrow(inboundBody = try server.readInbound()) - guard case .body(let body) = try? XCTUnwrap(inboundBody) else { - XCTFail("Expected body after head") - return - } - XCTAssertEqual(try JSONDecoder().decode(ErrorResponse.self, from: body).errorMessage, "boom") - - XCTAssertEqual(try server.readInbound(), .end(nil)) - - XCTAssertNoThrow(try server.writeOutbound(.head(.init(version: .init(major: 1, minor: 1), status: .accepted)))) - XCTAssertNoThrow(try server.writeOutbound(.end(nil))) - XCTAssertNoThrow(try result.wait()) - } - - func testInvocationErrorReport() { - let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) - defer { XCTAssertNoThrow(try eventLoopGroup.syncShutdownGracefully()) } - - let server = NIOHTTP1TestServer(group: eventLoopGroup) - defer { XCTAssertNoThrow(try server.stop()) } - - let logger = Logger(label: "TestLogger") - let client = LambdaRuntimeClient( - eventLoop: eventLoopGroup.next(), - configuration: .init(address: "127.0.0.1:\(server.serverPort)") - ) - - let header = HTTPHeaders([ - (AmazonHeaders.requestID, "test"), - (AmazonHeaders.deadline, String(Date(timeIntervalSinceNow: 60).millisSinceEpoch)), - (AmazonHeaders.invokedFunctionARN, "arn:aws:lambda:us-east-1:123456789012:function:custom-runtime"), - (AmazonHeaders.traceID, "Root=\(AmazonHeaders.generateXRayTraceID());Sampled=1"), - ]) - var inv: InvocationMetadata? - XCTAssertNoThrow(inv = try InvocationMetadata(headers: header)) - guard let invocation = inv else { return } - - let result = client.reportResults( - logger: logger, - invocation: invocation, - result: Result.failure(TestError("boom")) - ) - - var inboundHeader: HTTPServerRequestPart? - XCTAssertNoThrow(inboundHeader = try server.readInbound()) - guard case .head(let head) = try? XCTUnwrap(inboundHeader) else { - XCTFail("Expected to get a head first") - return - } - XCTAssertEqual(head.headers["lambda-runtime-function-error-type"], ["Unhandled"]) - XCTAssertEqual(head.headers["user-agent"], ["Swift-Lambda/Unknown"]) - - var inboundBody: HTTPServerRequestPart? - XCTAssertNoThrow(inboundBody = try server.readInbound()) - guard case .body(let body) = try? XCTUnwrap(inboundBody) else { - XCTFail("Expected body after head") - return - } - XCTAssertEqual(try JSONDecoder().decode(ErrorResponse.self, from: body).errorMessage, "boom") - - XCTAssertEqual(try server.readInbound(), .end(nil)) - - XCTAssertNoThrow(try server.writeOutbound(.head(.init(version: .init(major: 1, minor: 1), status: .accepted)))) - XCTAssertNoThrow(try server.writeOutbound(.end(nil))) - XCTAssertNoThrow(try result.wait()) - } - - func testInvocationSuccessResponse() { - let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) - defer { XCTAssertNoThrow(try eventLoopGroup.syncShutdownGracefully()) } - - let server = NIOHTTP1TestServer(group: eventLoopGroup) - defer { XCTAssertNoThrow(try server.stop()) } - - let logger = Logger(label: "TestLogger") - let client = LambdaRuntimeClient( - eventLoop: eventLoopGroup.next(), - configuration: .init(address: "127.0.0.1:\(server.serverPort)") - ) - - let header = HTTPHeaders([ - (AmazonHeaders.requestID, "test"), - (AmazonHeaders.deadline, String(Date(timeIntervalSinceNow: 60).millisSinceEpoch)), - (AmazonHeaders.invokedFunctionARN, "arn:aws:lambda:us-east-1:123456789012:function:custom-runtime"), - (AmazonHeaders.traceID, "Root=\(AmazonHeaders.generateXRayTraceID());Sampled=1"), - ]) - var inv: InvocationMetadata? - XCTAssertNoThrow(inv = try InvocationMetadata(headers: header)) - guard let invocation = inv else { return } - - let result = client.reportResults(logger: logger, invocation: invocation, result: Result.success(nil)) - - var inboundHeader: HTTPServerRequestPart? - XCTAssertNoThrow(inboundHeader = try server.readInbound()) - guard case .head(let head) = try? XCTUnwrap(inboundHeader) else { - XCTFail("Expected to get a head first") - return - } - XCTAssertFalse(head.headers.contains(name: "lambda-runtime-function-error-type")) - XCTAssertEqual(head.headers["user-agent"], ["Swift-Lambda/Unknown"]) - - XCTAssertEqual(try server.readInbound(), .end(nil)) - - XCTAssertNoThrow(try server.writeOutbound(.head(.init(version: .init(major: 1, minor: 1), status: .accepted)))) - XCTAssertNoThrow(try server.writeOutbound(.end(nil))) - XCTAssertNoThrow(try result.wait()) - } - - class Behavior: LambdaServerBehavior { - var state = 0 - - func processInitError(error: ErrorResponse) -> Result { - self.state += 1 - return .success(()) - } - - func getInvocation() -> GetInvocationResult { - self.state += 2 - return .success(("1", "hello")) - } - - func processResponse(requestId: String, response: String?) -> Result { - self.state += 4 - return .success(()) - } - - func processError(requestId: String, error: ErrorResponse) -> Result { - self.state += 8 - return .success(()) - } - } -} diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeTest.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeTest.swift deleted file mode 100644 index 6f8ddf1c..00000000 --- a/Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeTest.swift +++ /dev/null @@ -1,158 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2017-2018 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import Logging -import NIOCore -import NIOHTTP1 -import NIOPosix -import XCTest - -@testable import AWSLambdaRuntimeCore - -class LambdaRuntimeTest: XCTestCase { - func testShutdownFutureIsFulfilledWithStartUpError() { - let server = MockLambdaServer(behavior: FailedBootstrapBehavior()) - XCTAssertNoThrow(try server.start().wait()) - defer { XCTAssertNoThrow(try server.stop().wait()) } - let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) - defer { XCTAssertNoThrow(try eventLoopGroup.syncShutdownGracefully()) } - - let eventLoop = eventLoopGroup.next() - let logger = Logger(label: "TestLogger") - let runtime = LambdaRuntimeFactory.makeRuntime(StartupErrorHandler.self, eventLoop: eventLoop, logger: logger) - - // eventLoop.submit in this case returns an EventLoopFuture> - // which is why we need `wait().wait()` - XCTAssertThrowsError(try eventLoop.flatSubmit { runtime.start() }.wait()) { - XCTAssert($0 is StartupError) - } - - XCTAssertThrowsError(try runtime.shutdownFuture.wait()) { - XCTAssert($0 is StartupError) - } - } - - func testShutdownIsCalledWhenLambdaShutsdown() { - let server = MockLambdaServer(behavior: BadBehavior()) - XCTAssertNoThrow(try server.start().wait()) - defer { XCTAssertNoThrow(try server.stop().wait()) } - let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) - defer { XCTAssertNoThrow(try eventLoopGroup.syncShutdownGracefully()) } - - let eventLoop = eventLoopGroup.next() - let logger = Logger(label: "TestLogger") - let runtime = LambdaRuntimeFactory.makeRuntime(EchoHandler.self, eventLoop: eventLoop, logger: logger) - - XCTAssertNoThrow(_ = try eventLoop.flatSubmit { runtime.start() }.wait()) - XCTAssertThrowsError(try runtime.shutdownFuture.wait()) { - XCTAssertEqual(.badStatusCode(HTTPResponseStatus.internalServerError), $0 as? LambdaRuntimeError) - } - } - - func testLambdaResultIfShutsdownIsUnclean() { - let server = MockLambdaServer(behavior: BadBehavior()) - XCTAssertNoThrow(try server.start().wait()) - defer { XCTAssertNoThrow(try server.stop().wait()) } - let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) - defer { XCTAssertNoThrow(try eventLoopGroup.syncShutdownGracefully()) } - - struct ShutdownError: Error { - let description: String - } - - struct ShutdownErrorHandler: EventLoopLambdaHandler { - static func makeHandler(context: LambdaInitializationContext) -> EventLoopFuture { - // register shutdown operation - context.terminator.register( - name: "test 1", - handler: { eventLoop in - eventLoop.makeFailedFuture(ShutdownError(description: "error 1")) - } - ) - context.terminator.register( - name: "test 2", - handler: { eventLoop in - eventLoop.makeSucceededVoidFuture() - } - ) - context.terminator.register( - name: "test 3", - handler: { eventLoop in - eventLoop.makeFailedFuture(ShutdownError(description: "error 2")) - } - ) - context.terminator.register( - name: "test 4", - handler: { eventLoop in - eventLoop.makeSucceededVoidFuture() - } - ) - context.terminator.register( - name: "test 5", - handler: { eventLoop in - eventLoop.makeFailedFuture(ShutdownError(description: "error 3")) - } - ) - return context.eventLoop.makeSucceededFuture(ShutdownErrorHandler()) - } - - func handle(_ event: String, context: LambdaContext) -> EventLoopFuture { - context.eventLoop.makeSucceededVoidFuture() - } - } - - let eventLoop = eventLoopGroup.next() - let logger = Logger(label: "TestLogger") - let runtime = LambdaRuntimeFactory.makeRuntime(ShutdownErrorHandler.self, eventLoop: eventLoop, logger: logger) - - XCTAssertNoThrow(try eventLoop.flatSubmit { runtime.start() }.wait()) - XCTAssertThrowsError(try runtime.shutdownFuture.wait()) { error in - guard case LambdaRuntimeError.shutdownError(let shutdownError, .failure(let runtimeError)) = error else { - XCTFail("Unexpected error: \(error)") - return - } - - XCTAssertEqual( - shutdownError as? LambdaTerminator.TerminationError, - LambdaTerminator.TerminationError(underlying: [ - ShutdownError(description: "error 3"), - ShutdownError(description: "error 2"), - ShutdownError(description: "error 1"), - ]) - ) - XCTAssertEqual(runtimeError as? LambdaRuntimeError, .badStatusCode(.internalServerError)) - } - } -} - -struct BadBehavior: LambdaServerBehavior { - func getInvocation() -> GetInvocationResult { - .failure(.internalServerError) - } - - func processResponse(requestId: String, response: String?) -> Result { - XCTFail("should not report a response") - return .failure(.internalServerError) - } - - func processError(requestId: String, error: ErrorResponse) -> Result { - XCTFail("should not report an error") - return .failure(.internalServerError) - } - - func processInitError(error: ErrorResponse) -> Result { - XCTFail("should not report an error") - return .failure(.internalServerError) - } -} diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaTest.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaTest.swift deleted file mode 100644 index 3eb15fab..00000000 --- a/Tests/AWSLambdaRuntimeCoreTests/LambdaTest.swift +++ /dev/null @@ -1,382 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2017-2018 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import Logging -import NIOCore -import NIOPosix -import XCTest - -@testable import AWSLambdaRuntimeCore - -class LambdaTest: XCTestCase { - func testSuccess() { - let server = MockLambdaServer(behavior: Behavior()) - XCTAssertNoThrow(try server.start().wait()) - defer { XCTAssertNoThrow(try server.stop().wait()) } - - let maxTimes = Int.random(in: 10...20) - let configuration = LambdaConfiguration(lifecycle: .init(maxTimes: maxTimes)) - let result = Lambda.run(configuration: configuration, handlerType: EchoHandler.self) - assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) - } - - func testFailure() { - let server = MockLambdaServer(behavior: Behavior(result: .failure(RuntimeError()))) - XCTAssertNoThrow(try server.start().wait()) - defer { XCTAssertNoThrow(try server.stop().wait()) } - - let maxTimes = Int.random(in: 10...20) - let configuration = LambdaConfiguration(lifecycle: .init(maxTimes: maxTimes)) - let result = Lambda.run(configuration: configuration, handlerType: RuntimeErrorHandler.self) - assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) - } - - func testBootstrapFailure() { - let server = MockLambdaServer(behavior: FailedBootstrapBehavior()) - XCTAssertNoThrow(try server.start().wait()) - defer { XCTAssertNoThrow(try server.stop().wait()) } - - let result = Lambda.run(configuration: .init(), handlerType: StartupErrorHandler.self) - assertLambdaRuntimeResult(result, shouldFailWithError: StartupError()) - } - - func testBootstrapFailureAndReportErrorFailure() { - struct Behavior: LambdaServerBehavior { - func getInvocation() -> GetInvocationResult { - XCTFail("should not get invocation") - return .failure(.internalServerError) - } - - func processResponse(requestId: String, response: String?) -> Result { - XCTFail("should not report a response") - return .failure(.internalServerError) - } - - func processError(requestId: String, error: ErrorResponse) -> Result { - XCTFail("should not report an error") - return .failure(.internalServerError) - } - - func processInitError(error: ErrorResponse) -> Result { - .failure(.internalServerError) - } - } - - let server = MockLambdaServer(behavior: FailedBootstrapBehavior()) - XCTAssertNoThrow(try server.start().wait()) - defer { XCTAssertNoThrow(try server.stop().wait()) } - - let result = Lambda.run(configuration: .init(), handlerType: StartupErrorHandler.self) - assertLambdaRuntimeResult(result, shouldFailWithError: StartupError()) - } - - func testStartStopInDebugMode() { - let server = MockLambdaServer(behavior: Behavior()) - XCTAssertNoThrow(try server.start().wait()) - defer { XCTAssertNoThrow(try server.stop().wait()) } - - let signal = Signal.ALRM - let maxTimes = 1000 - let configuration = LambdaConfiguration(lifecycle: .init(maxTimes: maxTimes, stopSignal: signal)) - - DispatchQueue(label: "test").async { - // we need to schedule the signal before we start the long running `Lambda.run`, since - // `Lambda.run` will block the main thread. - usleep(100_000) - kill(getpid(), signal.rawValue) // ignore-unacceptable-language - } - let result = Lambda.run(configuration: configuration, handlerType: EchoHandler.self) - - switch result { - case .success(let invocationCount): - XCTAssertGreaterThan(invocationCount, 0, "should have stopped before any request made") - XCTAssertLessThan(invocationCount, maxTimes, "should have stopped before \(maxTimes)") - case .failure(let error): - XCTFail("Unexpected error: \(error)") - } - } - - func testTimeout() { - let timeout: Int64 = 100 - let server = MockLambdaServer(behavior: Behavior(requestId: "timeout", event: "\(timeout * 2)")) - XCTAssertNoThrow(try server.start().wait()) - defer { XCTAssertNoThrow(try server.stop().wait()) } - - let configuration = LambdaConfiguration( - lifecycle: .init(maxTimes: 1), - runtimeEngine: .init(requestTimeout: .milliseconds(timeout)) - ) - let result = Lambda.run(configuration: configuration, handlerType: EchoHandler.self) - assertLambdaRuntimeResult(result, shouldFailWithError: LambdaRuntimeError.upstreamError("timeout")) - } - - func testDisconnect() { - let server = MockLambdaServer(behavior: Behavior(requestId: "disconnect")) - XCTAssertNoThrow(try server.start().wait()) - defer { XCTAssertNoThrow(try server.stop().wait()) } - - let configuration = LambdaConfiguration(lifecycle: .init(maxTimes: 1)) - let result = Lambda.run(configuration: configuration, handlerType: EchoHandler.self) - assertLambdaRuntimeResult( - result, - shouldFailWithError: LambdaRuntimeError.upstreamError("connectionResetByPeer") - ) - } - - func testBigEvent() { - let event = String(repeating: "*", count: 104_448) - let server = MockLambdaServer(behavior: Behavior(event: event, result: .success(event))) - XCTAssertNoThrow(try server.start().wait()) - defer { XCTAssertNoThrow(try server.stop().wait()) } - - let configuration = LambdaConfiguration(lifecycle: .init(maxTimes: 1)) - let result = Lambda.run(configuration: configuration, handlerType: EchoHandler.self) - assertLambdaRuntimeResult(result, shouldHaveRun: 1) - } - - func testKeepAliveServer() { - let server = MockLambdaServer(behavior: Behavior(), keepAlive: true) - XCTAssertNoThrow(try server.start().wait()) - defer { XCTAssertNoThrow(try server.stop().wait()) } - - let maxTimes = 10 - let configuration = LambdaConfiguration(lifecycle: .init(maxTimes: maxTimes)) - let result = Lambda.run(configuration: configuration, handlerType: EchoHandler.self) - assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) - } - - func testNoKeepAliveServer() { - let server = MockLambdaServer(behavior: Behavior(), keepAlive: false) - XCTAssertNoThrow(try server.start().wait()) - defer { XCTAssertNoThrow(try server.stop().wait()) } - - let maxTimes = 10 - let configuration = LambdaConfiguration(lifecycle: .init(maxTimes: maxTimes)) - let result = Lambda.run(configuration: configuration, handlerType: EchoHandler.self) - assertLambdaRuntimeResult(result, shouldHaveRun: maxTimes) - } - - func testServerFailure() { - let server = MockLambdaServer(behavior: Behavior()) - XCTAssertNoThrow(try server.start().wait()) - defer { XCTAssertNoThrow(try server.stop().wait()) } - - struct Behavior: LambdaServerBehavior { - func getInvocation() -> GetInvocationResult { - .failure(.internalServerError) - } - - func processResponse(requestId: String, response: String?) -> Result { - .failure(.internalServerError) - } - - func processError(requestId: String, error: ErrorResponse) -> Result { - .failure(.internalServerError) - } - - func processInitError(error: ErrorResponse) -> Result { - XCTFail("should not report init error") - return .failure(.internalServerError) - } - } - - let result = Lambda.run(configuration: .init(), handlerType: EchoHandler.self) - assertLambdaRuntimeResult(result, shouldFailWithError: LambdaRuntimeError.badStatusCode(.internalServerError)) - } - - func testDeadline() { - let delta = Int.random(in: 1...600) - - let milli1 = Date(timeIntervalSinceNow: Double(delta)).millisSinceEpoch - let milli2 = (DispatchWallTime.now() + .seconds(delta)).millisSinceEpoch - XCTAssertEqual(Double(milli1), Double(milli2), accuracy: 2.0) - - let now1 = DispatchWallTime.now() - let now2 = DispatchWallTime(millisSinceEpoch: Date().millisSinceEpoch) - XCTAssertEqual(Double(now2.rawValue), Double(now1.rawValue), accuracy: 2_000_000.0) - - let future1 = DispatchWallTime.now() + .seconds(delta) - let future2 = DispatchWallTime(millisSinceEpoch: Date(timeIntervalSinceNow: Double(delta)).millisSinceEpoch) - XCTAssertEqual(Double(future1.rawValue), Double(future2.rawValue), accuracy: 2_000_000.0) - - let past1 = DispatchWallTime.now() - .seconds(delta) - let past2 = DispatchWallTime(millisSinceEpoch: Date(timeIntervalSinceNow: Double(-delta)).millisSinceEpoch) - XCTAssertEqual(Double(past1.rawValue), Double(past2.rawValue), accuracy: 2_000_000.0) - - let context = LambdaContext( - requestID: UUID().uuidString, - traceID: UUID().uuidString, - invokedFunctionARN: UUID().uuidString, - deadline: .now() + .seconds(1), - cognitoIdentity: nil, - clientContext: nil, - logger: Logger(label: "test"), - eventLoop: NIOSingletons.posixEventLoopGroup.next(), - allocator: ByteBufferAllocator() - ) - XCTAssertGreaterThan(context.deadline, .now()) - - let expiredContext = LambdaContext( - requestID: context.requestID, - traceID: context.traceID, - invokedFunctionARN: context.invokedFunctionARN, - deadline: .now() - .seconds(1), - cognitoIdentity: context.cognitoIdentity, - clientContext: context.clientContext, - logger: context.logger, - eventLoop: context.eventLoop, - allocator: context.allocator - ) - XCTAssertLessThan(expiredContext.deadline, .now()) - } - - func testGetRemainingTime() { - let context = LambdaContext( - requestID: UUID().uuidString, - traceID: UUID().uuidString, - invokedFunctionARN: UUID().uuidString, - deadline: .now() + .seconds(1), - cognitoIdentity: nil, - clientContext: nil, - logger: Logger(label: "test"), - eventLoop: NIOSingletons.posixEventLoopGroup.next(), - allocator: ByteBufferAllocator() - ) - XCTAssertLessThanOrEqual(context.getRemainingTime(), .seconds(1)) - XCTAssertGreaterThan(context.getRemainingTime(), .milliseconds(800)) - } - - #if compiler(>=5.6) - func testSendable() async throws { - struct Handler: EventLoopLambdaHandler { - static func makeHandler(context: LambdaInitializationContext) -> EventLoopFuture { - context.eventLoop.makeSucceededFuture(Handler()) - } - - func handle(_ event: String, context: LambdaContext) -> EventLoopFuture { - context.eventLoop.makeSucceededFuture("hello") - } - } - - let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) - defer { XCTAssertNoThrow(try eventLoopGroup.syncShutdownGracefully()) } - - let server = MockLambdaServer(behavior: Behavior(), port: 0) - var port: Int? - XCTAssertNoThrow(port = try server.start().wait()) - guard let port else { return XCTFail("Expected the server to have started") } - defer { XCTAssertNoThrow(try server.stop().wait()) } - - let logger = Logger(label: "TestLogger") - let configuration = LambdaConfiguration( - runtimeEngine: .init(address: "127.0.0.1:\(port)", requestTimeout: .milliseconds(100)) - ) - - let handler1 = Handler() - let task = Task.detached { - print(configuration.description) - logger.info("hello") - let runner = LambdaRunner(eventLoop: eventLoopGroup.next(), configuration: configuration) - - try await runner.run( - handler: CodableEventLoopLambdaHandler( - handler: handler1, - allocator: ByteBufferAllocator() - ), - logger: logger - ).get() - - try await runner.initialize( - handlerType: CodableEventLoopLambdaHandler.self, - logger: logger, - terminator: LambdaTerminator() - ).flatMap { handler2 in - runner.run(handler: handler2, logger: logger) - }.get() - } - - try await task.value - } - #endif -} - -private struct Behavior: LambdaServerBehavior { - let requestId: String - let event: String - let result: Result - - init( - requestId: String = UUID().uuidString, - event: String = "hello", - result: Result = .success("hello") - ) { - self.requestId = requestId - self.event = event - self.result = result - } - - func getInvocation() -> GetInvocationResult { - .success((requestId: self.requestId, event: self.event)) - } - - func processResponse(requestId: String, response: String?) -> Result { - XCTAssertEqual(self.requestId, requestId, "expecting requestId to match") - switch self.result { - case .success(let expected): - XCTAssertEqual(expected, response, "expecting response to match") - return .success(()) - case .failure: - XCTFail("unexpected to fail, but succeeded with: \(response ?? "undefined")") - return .failure(.internalServerError) - } - } - - func processError(requestId: String, error: ErrorResponse) -> Result { - XCTAssertEqual(self.requestId, requestId, "expecting requestId to match") - switch self.result { - case .success: - XCTFail("unexpected to succeed, but failed with: \(error)") - return .failure(.internalServerError) - case .failure(let expected): - XCTAssertEqual(String(describing: expected), error.errorMessage, "expecting error to match") - return .success(()) - } - } - - func processInitError(error: ErrorResponse) -> Result { - XCTFail("should not report init error") - return .failure(.internalServerError) - } -} - -struct FailedBootstrapBehavior: LambdaServerBehavior { - func getInvocation() -> GetInvocationResult { - XCTFail("should not get invocation") - return .failure(.internalServerError) - } - - func processResponse(requestId: String, response: String?) -> Result { - XCTFail("should not report a response") - return .failure(.internalServerError) - } - - func processError(requestId: String, error: ErrorResponse) -> Result { - XCTFail("should not report an error") - return .failure(.internalServerError) - } - - func processInitError(error: ErrorResponse) -> Result { - .success(()) - } -} diff --git a/Tests/AWSLambdaRuntimeCoreTests/Utils.swift b/Tests/AWSLambdaRuntimeCoreTests/Utils.swift index 41a2552f..cd7730b7 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/Utils.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/Utils.swift @@ -2,7 +2,7 @@ // // This source file is part of the SwiftAWSLambdaRuntime open source project // -// Copyright (c) 2017-2021 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Copyright (c) 2017-2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors // Licensed under Apache License v2.0 // // See LICENSE.txt for license information @@ -12,153 +12,10 @@ // //===----------------------------------------------------------------------===// -import Logging -import NIOCore -import NIOPosix -import XCTest - -@testable import AWSLambdaRuntimeCore - -func runLambda(behavior: LambdaServerBehavior, handlerType: Handler.Type) throws { - try runLambda(behavior: behavior, handlerProvider: CodableSimpleLambdaHandler.makeHandler(context:)) -} - -func runLambda(behavior: LambdaServerBehavior, handlerType: Handler.Type) throws { - try runLambda(behavior: behavior, handlerProvider: CodableLambdaHandler.makeHandler(context:)) -} - -func runLambda(behavior: LambdaServerBehavior, handlerType: Handler.Type) throws { - try runLambda(behavior: behavior, handlerProvider: CodableEventLoopLambdaHandler.makeHandler(context:)) -} - -func runLambda( - behavior: LambdaServerBehavior, - handlerProvider: @escaping (LambdaInitializationContext) -> EventLoopFuture -) throws { - try runLambda( - behavior: behavior, - handlerProvider: { context in - handlerProvider(context).map { - CodableEventLoopLambdaHandler(handler: $0, allocator: context.allocator) - } - } - ) -} - -func runLambda( - behavior: LambdaServerBehavior, - handlerProvider: @escaping (LambdaInitializationContext) async throws -> Handler -) throws { - try runLambda( - behavior: behavior, - handlerProvider: { context in - let handler = try await handlerProvider(context) - return CodableEventLoopLambdaHandler(handler: handler, allocator: context.allocator) - } - ) -} - -func runLambda( - behavior: LambdaServerBehavior, - handlerProvider: @escaping (LambdaInitializationContext) async throws -> Handler -) throws { - let eventLoopGroup = NIOSingletons.posixEventLoopGroup.next() - try runLambda( - behavior: behavior, - handlerProvider: { context in - let promise = eventLoopGroup.next().makePromise(of: Handler.self) - promise.completeWithTask { - try await handlerProvider(context) - } - return promise.futureResult - } - ) -} - -func runLambda( - behavior: LambdaServerBehavior, - handlerProvider: @escaping (LambdaInitializationContext) -> EventLoopFuture -) throws { - let eventLoopGroup = NIOSingletons.posixEventLoopGroup.next() - let logger = Logger(label: "TestLogger") - let server = MockLambdaServer(behavior: behavior, port: 0) - let port = try server.start().wait() - let configuration = LambdaConfiguration( - runtimeEngine: .init(address: "127.0.0.1:\(port)", requestTimeout: .milliseconds(100)) - ) - let terminator = LambdaTerminator() - let runner = LambdaRunner(eventLoop: eventLoopGroup.next(), configuration: configuration) - defer { XCTAssertNoThrow(try server.stop().wait()) } - try runner.initialize(handlerProvider: handlerProvider, logger: logger, terminator: terminator).flatMap { handler in - runner.run(handler: handler, logger: logger) - }.wait() -} - -func assertLambdaRuntimeResult( - _ result: Result, - shouldHaveRun: Int = 0, - shouldFailWithError: Error? = nil, - file: StaticString = #file, - line: UInt = #line -) { - switch result { - case .success where shouldFailWithError != nil: - XCTFail("should fail with \(shouldFailWithError!)", file: file, line: line) - case .success(let count) where shouldFailWithError == nil: - XCTAssertEqual(shouldHaveRun, count, "should have run \(shouldHaveRun) times", file: file, line: line) - case .failure(let error) where shouldFailWithError == nil: - XCTFail("should succeed, but failed with \(error)", file: file, line: line) - case .failure(let error) where shouldFailWithError != nil: - XCTAssertEqual( - String(describing: shouldFailWithError!), - String(describing: error), - "expected error to mactch", - file: file, - line: line - ) - default: - XCTFail("invalid state") - } -} - -struct TestError: Error, Equatable, CustomStringConvertible { - let description: String - - init(_ description: String) { - self.description = description - } -} +import Foundation extension Date { var millisSinceEpoch: Int64 { Int64(self.timeIntervalSince1970 * 1000) } } - -extension LambdaRuntimeError: Equatable { - public static func == (lhs: Self, rhs: Self) -> Bool { - // technically incorrect, but good enough for our tests - String(describing: lhs) == String(describing: rhs) - } -} - -extension LambdaTerminator.TerminationError: Equatable { - public static func == (lhs: Self, rhs: Self) -> Bool { - guard lhs.underlying.count == rhs.underlying.count else { - return false - } - // technically incorrect, but good enough for our tests - return String(describing: lhs) == String(describing: rhs) - } -} - -// for backward compatibility in tests -extension LambdaRunner { - func initialize( - handlerType: Handler.Type, - logger: Logger, - terminator: LambdaTerminator - ) -> EventLoopFuture { - self.initialize(handlerProvider: handlerType.makeHandler(context:), logger: logger, terminator: terminator) - } -} diff --git a/Tests/AWSLambdaRuntimeTests/Lambda+CodableTest.swift b/Tests/AWSLambdaRuntimeTests/Lambda+CodableTest.swift deleted file mode 100644 index afcf0071..00000000 --- a/Tests/AWSLambdaRuntimeTests/Lambda+CodableTest.swift +++ /dev/null @@ -1,251 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2017-2018 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import Logging -import NIOCore -import NIOFoundationCompat -import NIOPosix -import XCTest - -@testable import AWSLambdaRuntime -@testable import AWSLambdaRuntimeCore - -class CodableLambdaTest: XCTestCase { - var eventLoopGroup: EventLoopGroup! - let allocator = ByteBufferAllocator() - - override func setUp() { - self.eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) - } - - override func tearDown() { - XCTAssertNoThrow(try self.eventLoopGroup.syncShutdownGracefully()) - } - - func testCodableVoidEventLoopFutureHandler() { - struct Handler: EventLoopLambdaHandler { - var expected: Request? - - static func makeHandler(context: LambdaInitializationContext) -> EventLoopFuture { - context.eventLoop.makeSucceededFuture(Handler()) - } - - func handle(_ event: Request, context: LambdaContext) -> EventLoopFuture { - XCTAssertEqual(event, self.expected) - return context.eventLoop.makeSucceededVoidFuture() - } - } - - let context = self.newContext() - let request = Request(requestId: UUID().uuidString) - - let handler = CodableEventLoopLambdaHandler( - handler: Handler(expected: request), - allocator: context.allocator - ) - - var inputBuffer = context.allocator.buffer(capacity: 1024) - XCTAssertNoThrow(try JSONEncoder().encode(request, into: &inputBuffer)) - var outputBuffer: ByteBuffer? - XCTAssertNoThrow(outputBuffer = try handler.handle(inputBuffer, context: context).wait()) - XCTAssertEqual(outputBuffer?.readableBytes, 0) - } - - func testCodableEventLoopFutureHandler() { - struct Handler: EventLoopLambdaHandler { - var expected: Request? - - static func makeHandler(context: LambdaInitializationContext) -> EventLoopFuture { - context.eventLoop.makeSucceededFuture(Handler()) - } - - func handle(_ event: Request, context: LambdaContext) -> EventLoopFuture { - XCTAssertEqual(event, self.expected) - return context.eventLoop.makeSucceededFuture(Response(requestId: event.requestId)) - } - } - - let context = self.newContext() - let request = Request(requestId: UUID().uuidString) - var response: Response? - - let handler = CodableEventLoopLambdaHandler( - handler: Handler(expected: request), - allocator: context.allocator - ) - - var inputBuffer = context.allocator.buffer(capacity: 1024) - XCTAssertNoThrow(try JSONEncoder().encode(request, into: &inputBuffer)) - var outputBuffer: ByteBuffer? - XCTAssertNoThrow(outputBuffer = try handler.handle(inputBuffer, context: context).wait()) - XCTAssertNoThrow(response = try JSONDecoder().decode(Response.self, from: XCTUnwrap(outputBuffer))) - XCTAssertEqual(response?.requestId, request.requestId) - } - - func testCodableVoidHandler() async throws { - struct Handler: LambdaHandler { - init(context: AWSLambdaRuntimeCore.LambdaInitializationContext) async throws {} - - var expected: Request? - - func handle(_ event: Request, context: LambdaContext) async throws { - XCTAssertEqual(event, self.expected) - } - } - - let context = self.newContext() - let request = Request(requestId: UUID().uuidString) - - var underlying = try await Handler(context: self.newInitContext()) - underlying.expected = request - let handler = CodableLambdaHandler( - handler: underlying, - allocator: context.allocator - ) - - var inputBuffer = context.allocator.buffer(capacity: 1024) - XCTAssertNoThrow(try JSONEncoder().encode(request, into: &inputBuffer)) - var outputBuffer: ByteBuffer? - XCTAssertNoThrow(outputBuffer = try handler.handle(inputBuffer, context: context).wait()) - XCTAssertEqual(outputBuffer?.readableBytes, 0) - } - - func testCodableHandler() async throws { - struct Handler: LambdaHandler { - init(context: AWSLambdaRuntimeCore.LambdaInitializationContext) async throws {} - - var expected: Request? - - func handle(_ event: Request, context: LambdaContext) async throws -> Response { - XCTAssertEqual(event, self.expected) - return Response(requestId: event.requestId) - } - } - - let context = self.newContext() - let request = Request(requestId: UUID().uuidString) - var response: Response? - - var underlying = try await Handler(context: self.newInitContext()) - underlying.expected = request - let handler = CodableLambdaHandler( - handler: underlying, - allocator: context.allocator - ) - - var inputBuffer = context.allocator.buffer(capacity: 1024) - XCTAssertNoThrow(try JSONEncoder().encode(request, into: &inputBuffer)) - - var outputBuffer: ByteBuffer? - XCTAssertNoThrow(outputBuffer = try handler.handle(inputBuffer, context: context).wait()) - XCTAssertNoThrow(response = try JSONDecoder().decode(Response.self, from: XCTUnwrap(outputBuffer))) - XCTAssertNoThrow(try handler.handle(inputBuffer, context: context).wait()) - XCTAssertEqual(response?.requestId, request.requestId) - } - - func testCodableVoidSimpleHandler() async throws { - struct Handler: SimpleLambdaHandler { - var expected: Request? - - func handle(_ event: Request, context: LambdaContext) async throws { - XCTAssertEqual(event, self.expected) - } - } - - let context = self.newContext() - let request = Request(requestId: UUID().uuidString) - - var underlying = Handler() - underlying.expected = request - let handler = CodableSimpleLambdaHandler( - handler: underlying, - allocator: context.allocator - ) - - var inputBuffer = context.allocator.buffer(capacity: 1024) - XCTAssertNoThrow(try JSONEncoder().encode(request, into: &inputBuffer)) - var outputBuffer: ByteBuffer? - XCTAssertNoThrow(outputBuffer = try handler.handle(inputBuffer, context: context).wait()) - XCTAssertEqual(outputBuffer?.readableBytes, 0) - } - - func testCodableSimpleHandler() async throws { - struct Handler: SimpleLambdaHandler { - var expected: Request? - - func handle(_ event: Request, context: LambdaContext) async throws -> Response { - XCTAssertEqual(event, self.expected) - return Response(requestId: event.requestId) - } - } - - let context = self.newContext() - let request = Request(requestId: UUID().uuidString) - var response: Response? - - var underlying = Handler() - underlying.expected = request - let handler = CodableSimpleLambdaHandler( - handler: underlying, - allocator: context.allocator - ) - - var inputBuffer = context.allocator.buffer(capacity: 1024) - XCTAssertNoThrow(try JSONEncoder().encode(request, into: &inputBuffer)) - - var outputBuffer: ByteBuffer? - XCTAssertNoThrow(outputBuffer = try handler.handle(inputBuffer, context: context).wait()) - XCTAssertNoThrow(response = try JSONDecoder().decode(Response.self, from: XCTUnwrap(outputBuffer))) - XCTAssertNoThrow(try handler.handle(inputBuffer, context: context).wait()) - XCTAssertEqual(response?.requestId, request.requestId) - } - - // convenience method - func newContext() -> LambdaContext { - LambdaContext( - requestID: UUID().uuidString, - traceID: "abc123", - invokedFunctionARN: "aws:arn:", - deadline: .now() + .seconds(3), - cognitoIdentity: nil, - clientContext: nil, - logger: Logger(label: "test"), - eventLoop: self.eventLoopGroup.next(), - allocator: ByteBufferAllocator() - ) - } - - func newInitContext() -> LambdaInitializationContext { - LambdaInitializationContext( - logger: Logger(label: "test"), - eventLoop: self.eventLoopGroup.next(), - allocator: ByteBufferAllocator(), - terminator: LambdaTerminator() - ) - } -} - -private struct Request: Codable, Equatable { - let requestId: String - init(requestId: String) { - self.requestId = requestId - } -} - -private struct Response: Codable, Equatable { - let requestId: String - init(requestId: String) { - self.requestId = requestId - } -} diff --git a/Tests/AWSLambdaTestingTests/LambdaTestRuntimeTests.swift b/Tests/AWSLambdaTestingTests/LambdaTestRuntimeTests.swift new file mode 100644 index 00000000..47d29dfe --- /dev/null +++ b/Tests/AWSLambdaTestingTests/LambdaTestRuntimeTests.swift @@ -0,0 +1,18 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2020 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import AWSLambdaRuntime +import AWSLambdaTesting +import NIOCore +import Testing diff --git a/Tests/AWSLambdaTestingTests/Tests.swift b/Tests/AWSLambdaTestingTests/Tests.swift deleted file mode 100644 index dd152ac2..00000000 --- a/Tests/AWSLambdaTestingTests/Tests.swift +++ /dev/null @@ -1,102 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2020 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import AWSLambdaRuntime -import AWSLambdaTesting -import NIOCore -import XCTest - -class LambdaTestingTests: XCTestCase { - func testBasics() async throws { - struct MyLambda: SimpleLambdaHandler { - func handle(_ event: String, context: LambdaContext) async throws -> String { - event - } - } - - let uuid = UUID().uuidString - let result = try await Lambda.test(MyLambda.self, with: uuid) - XCTAssertEqual(result, uuid) - } - - func testCodableClosure() async throws { - struct Request: Codable { - let name: String - } - - struct Response: Codable { - let message: String - } - - struct MyLambda: SimpleLambdaHandler { - func handle(_ event: Request, context: LambdaContext) async throws -> Response { - Response(message: "echo" + event.name) - } - } - - let request = Request(name: UUID().uuidString) - let response = try await Lambda.test(MyLambda.self, with: request) - XCTAssertEqual(response.message, "echo" + request.name) - } - - func testCodableVoidClosure() async throws { - struct Request: Codable { - let name: String - } - - struct MyLambda: SimpleLambdaHandler { - // DIRTY HACK: To verify the handler was actually invoked, we change a global variable. - static var VoidLambdaHandlerInvokeCount: Int = 0 - - func handle(_ event: Request, context: LambdaContext) async throws { - Self.VoidLambdaHandlerInvokeCount += 1 - } - } - - let request = Request(name: UUID().uuidString) - MyLambda.VoidLambdaHandlerInvokeCount = 0 - try await Lambda.test(MyLambda.self, with: request) - XCTAssertEqual(MyLambda.VoidLambdaHandlerInvokeCount, 1) - } - - func testInvocationFailure() async throws { - struct MyError: Error {} - - struct MyLambda: SimpleLambdaHandler { - func handle(_ event: String, context: LambdaContext) async throws { - throw MyError() - } - } - - do { - try await Lambda.test(MyLambda.self, with: UUID().uuidString) - XCTFail("expected to throw") - } catch { - XCTAssert(error is MyError) - } - } - - func testAsyncLongRunning() async throws { - struct MyLambda: SimpleLambdaHandler { - func handle(_ event: String, context: LambdaContext) async throws -> String { - try await Task.sleep(nanoseconds: 500 * 1000 * 1000) - return event - } - } - - let uuid = UUID().uuidString - let result = try await Lambda.test(MyLambda.self, with: uuid) - XCTAssertEqual(result, uuid) - } -} From 06763b885998723ced89ddcbfbb516d2a3b81481 Mon Sep 17 00:00:00 2001 From: Fabian Fett Date: Wed, 4 Sep 2024 18:41:46 +0200 Subject: [PATCH 028/177] Drop docc plugin (#354) --- Package.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/Package.swift b/Package.swift index 4253949d..4f0e0031 100644 --- a/Package.swift +++ b/Package.swift @@ -25,7 +25,6 @@ let package = Package( dependencies: [ .package(url: "https://github.com/apple/swift-nio.git", .upToNextMajor(from: "2.72.0")), .package(url: "https://github.com/apple/swift-log.git", .upToNextMajor(from: "1.5.4")), - .package(url: "https://github.com/apple/swift-docc-plugin.git", from: "1.0.0"), .package(url: "https://github.com/apple/swift-testing.git", branch: "swift-DEVELOPMENT-SNAPSHOT-2024-08-29-a"), ], targets: [ From 85b938e99e87ff23872fdf5ab924ba8207fbe274 Mon Sep 17 00:00:00 2001 From: aryan-25 Date: Thu, 5 Sep 2024 14:36:30 +0100 Subject: [PATCH 029/177] Add new LambdaRuntime (#353) --- Sources/AWSLambdaRuntime/Lambda+Codable.swift | 53 ++++++++++++++ Sources/AWSLambdaRuntimeCore/NewLambda.swift | 4 ++ .../NewLambdaHandlers.swift | 67 ++++++++++++++++++ .../NewLambdaRuntime.swift | 70 +++++++++++++++++++ .../NewLambdaRuntimeClient.swift | 55 ++++++++------- .../NewLambdaRuntimeError.swift | 3 + 6 files changed, 227 insertions(+), 25 deletions(-) create mode 100644 Sources/AWSLambdaRuntimeCore/NewLambdaRuntime.swift diff --git a/Sources/AWSLambdaRuntime/Lambda+Codable.swift b/Sources/AWSLambdaRuntime/Lambda+Codable.swift index c345e553..1f59b8f7 100644 --- a/Sources/AWSLambdaRuntime/Lambda+Codable.swift +++ b/Sources/AWSLambdaRuntime/Lambda+Codable.swift @@ -65,3 +65,56 @@ extension LambdaCodableAdapter { ) } } + +extension NewLambdaRuntime { + /// Initialize an instance with a ``NewLambdaHandler`` defined in the form of a closure **with a non-`Void` return type**. + /// - Parameter body: The handler in the form of a closure. + /// - Parameter encoder: The encoder object that will be used to encode the generic ``Output`` into a ``ByteBuffer``. ``JSONEncoder()`` used as default. + /// - Parameter decoder: The decoder object that will be used to decode the incoming ``ByteBuffer`` event into the generic ``Event`` type. ``JSONDecoder()`` used as default. + package convenience init( + body: @escaping (Event, NewLambdaContext) async throws -> Output, + encoder: JSONEncoder = JSONEncoder(), + decoder: JSONDecoder = JSONDecoder() + ) + where + Handler == LambdaCodableAdapter< + LambdaHandlerAdapter>, + Event, + Output, + JSONDecoder, + LambdaJSONOutputEncoder + > + { + let handler = LambdaCodableAdapter( + encoder: encoder, + decoder: decoder, + handler: LambdaHandlerAdapter(handler: ClosureHandler(body: body)) + ) + + self.init(handler: handler) + } + + /// Initialize an instance with a ``NewLambdaHandler`` defined in the form of a closure **with a `Void` return type**. + /// - Parameter body: The handler in the form of a closure. + /// - Parameter decoder: The decoder object that will be used to decode the incoming ``ByteBuffer`` event into the generic ``Event`` type. ``JSONDecoder()`` used as default. + package convenience init( + body: @escaping (Event, NewLambdaContext) async throws -> Void, + decoder: JSONDecoder = JSONDecoder() + ) + where + Handler == LambdaCodableAdapter< + LambdaHandlerAdapter>, + Event, + Void, + JSONDecoder, + VoidEncoder + > + { + let handler = LambdaCodableAdapter( + decoder: decoder, + handler: LambdaHandlerAdapter(handler: ClosureHandler(body: body)) + ) + + self.init(handler: handler) + } +} diff --git a/Sources/AWSLambdaRuntimeCore/NewLambda.swift b/Sources/AWSLambdaRuntimeCore/NewLambda.swift index 28eb7df9..d72df20b 100644 --- a/Sources/AWSLambdaRuntimeCore/NewLambda.swift +++ b/Sources/AWSLambdaRuntimeCore/NewLambda.swift @@ -14,6 +14,7 @@ import Dispatch import Logging +import NIOCore extension Lambda { package static func runLoop( @@ -44,4 +45,7 @@ extension Lambda { } } } + + /// The default EventLoop the Lambda is scheduled on. + package static var defaultEventLoop: any EventLoop = NIOSingletons.posixEventLoopGroup.next() } diff --git a/Sources/AWSLambdaRuntimeCore/NewLambdaHandlers.swift b/Sources/AWSLambdaRuntimeCore/NewLambdaHandlers.swift index 0f9e7412..2464a486 100644 --- a/Sources/AWSLambdaRuntimeCore/NewLambdaHandlers.swift +++ b/Sources/AWSLambdaRuntimeCore/NewLambdaHandlers.swift @@ -171,3 +171,70 @@ package struct ClosureHandler: NewLambdaHandler { try await self.body(event, context) } } + +extension NewLambdaRuntime { + /// Initialize an instance with a ``StreamingLambdaHandler`` in the form of a closure. + /// - Parameter body: The handler in the form of a closure. + package convenience init( + body: @Sendable @escaping (ByteBuffer, LambdaResponseStreamWriter, NewLambdaContext) async throws -> Void + ) where Handler == StreamingClosureHandler { + self.init(handler: StreamingClosureHandler(body: body)) + } + + /// Initialize an instance with a ``NewLambdaHandler`` defined in the form of a closure **with a non-`Void` return type**, an encoder, and a decoder. + /// - Parameter body: The handler in the form of a closure. + /// - Parameter encoder: The encoder object that will be used to encode the generic ``Output`` into a ``ByteBuffer``. + /// - Parameter decoder: The decoder object that will be used to decode the incoming ``ByteBuffer`` event into the generic ``Event`` type. + package convenience init< + Event: Decodable, + Output: Encodable, + Encoder: LambdaOutputEncoder, + Decoder: LambdaEventDecoder + >( + encoder: Encoder, + decoder: Decoder, + body: @escaping (Event, NewLambdaContext) async throws -> Output + ) + where + Handler == LambdaCodableAdapter< + LambdaHandlerAdapter>, + Event, + Output, + Decoder, + Encoder + > + { + let handler = LambdaCodableAdapter( + encoder: encoder, + decoder: decoder, + handler: LambdaHandlerAdapter(handler: ClosureHandler(body: body)) + ) + + self.init(handler: handler) + } + + /// Initialize an instance with a ``NewLambdaHandler`` defined in the form of a closure **with a `Void` return type**, an encoder, and a decoder. + /// - Parameter body: The handler in the form of a closure. + /// - Parameter encoder: The encoder object that will be used to encode the generic ``Output`` into a ``ByteBuffer``. + /// - Parameter decoder: The decoder object that will be used to decode the incoming ``ByteBuffer`` event into the generic ``Event`` type. + package convenience init( + decoder: Decoder, + body: @escaping (Event, NewLambdaContext) async throws -> Void + ) + where + Handler == LambdaCodableAdapter< + LambdaHandlerAdapter>, + Event, + Void, + Decoder, + VoidEncoder + > + { + let handler = LambdaCodableAdapter( + decoder: decoder, + handler: LambdaHandlerAdapter(handler: ClosureHandler(body: body)) + ) + + self.init(handler: handler) + } +} diff --git a/Sources/AWSLambdaRuntimeCore/NewLambdaRuntime.swift b/Sources/AWSLambdaRuntimeCore/NewLambdaRuntime.swift new file mode 100644 index 00000000..41212b22 --- /dev/null +++ b/Sources/AWSLambdaRuntimeCore/NewLambdaRuntime.swift @@ -0,0 +1,70 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import Foundation +import Logging +import NIOCore +import NIOConcurrencyHelpers + +// We need `@unchecked` Sendable here, as `NIOLockedValueBox` does not understand `sending` today. +// We don't want to use `NIOLockedValueBox` here anyway. We would love to use Mutex here, but this +// sadly crashes the compiler today. +package final class NewLambdaRuntime: @unchecked Sendable where Handler: StreamingLambdaHandler { + // TODO: We want to change this to Mutex as soon as this doesn't crash the Swift compiler on Linux anymore + let handlerMutex: NIOLockedValueBox> + let logger: Logger + let eventLoop: EventLoop + + package init( + handler: sending Handler, + eventLoop: EventLoop = Lambda.defaultEventLoop, + logger: Logger = Logger(label: "LambdaRuntime") + ) { + self.handlerMutex = NIOLockedValueBox(handler) + self.eventLoop = eventLoop + self.logger = logger + } + + package func run() async throws { + guard let runtimeEndpoint = Lambda.env("AWS_LAMBDA_RUNTIME_API") else { + throw NewLambdaRuntimeError(code: .missingLambdaRuntimeAPIEnvironmentVariable) + } + + let ipAndPort = runtimeEndpoint.split(separator: ":", maxSplits: 1) + let ip = String(ipAndPort[0]) + guard let port = Int(ipAndPort[1]) else { throw NewLambdaRuntimeError(code: .invalidPort) } + + let handler = self.handlerMutex.withLockedValue { handler in + let result = handler + handler = nil + return result + } + + guard let handler else { + throw NewLambdaRuntimeError(code: .runtimeCanOnlyBeStartedOnce) + } + + try await NewLambdaRuntimeClient.withRuntimeClient( + configuration: .init(ip: ip, port: port), + eventLoop: self.eventLoop, + logger: self.logger + ) { runtimeClient in + try await Lambda.runLoop( + runtimeClient: runtimeClient, + handler: handler, + logger: self.logger + ) + } + } +} diff --git a/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeClient.swift b/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeClient.swift index 98db7bf9..46199e98 100644 --- a/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeClient.swift +++ b/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeClient.swift @@ -303,7 +303,7 @@ final actor NewLambdaRuntimeClient: LambdaRuntimeClientProtocol { NIOHTTPClientResponseAggregator(maxContentLength: 6 * 1024 * 1024) ) try channel.pipeline.syncOperations.addHandler( - LambdaChannelHandler(delegate: self, logger: self.logger) + LambdaChannelHandler(delegate: self, logger: self.logger, configuration: self.configuration) ) return channel.eventLoop.makeSucceededFuture(()) } catch { @@ -433,10 +433,33 @@ private final class LambdaChannelHandler private var reusableErrorBuffer: ByteBuffer? private let logger: Logger private let delegate: Delegate + private let configuration: NewLambdaRuntimeClient.Configuration - init(delegate: Delegate, logger: Logger) { + /// These are the default headers that must be sent along an invocation + let defaultHeaders: HTTPHeaders + /// These headers must be sent along an invocation or initialization error report + let errorHeaders: HTTPHeaders + /// These headers must be sent when streaming a response + let streamingHeaders: HTTPHeaders + + init(delegate: Delegate, logger: Logger, configuration: NewLambdaRuntimeClient.Configuration) { self.delegate = delegate self.logger = logger + self.configuration = configuration + self.defaultHeaders = [ + "host": "\(self.configuration.ip):\(self.configuration.port)", + "user-agent": "Swift-Lambda/Unknown", + ] + self.errorHeaders = [ + "host": "\(self.configuration.ip):\(self.configuration.port)", + "user-agent": "Swift-Lambda/Unknown", + "lambda-runtime-function-error-type": "Unhandled", + ] + self.streamingHeaders = [ + "host": "\(self.configuration.ip):\(self.configuration.port)", + "user-agent": "Swift-Lambda/Unknown", + "transfer-encoding": "chunked", + ] } func nextInvocation(isolation: isolated (any Actor)? = #isolation) async throws -> Invocation { @@ -578,7 +601,7 @@ private final class LambdaChannelHandler version: .http1_1, method: .POST, uri: url, - headers: NewLambdaRuntimeClient.streamingHeaders + headers: self.streamingHeaders ) context.write(self.wrapOutboundOut(.head(httpRequest)), promise: nil) @@ -604,11 +627,12 @@ private final class LambdaChannelHandler let headers: HTTPHeaders = if byteBuffer?.readableBytes ?? 0 < 6_000_000 { [ + "host": "\(self.configuration.ip):\(self.configuration.port)", "user-agent": "Swift-Lambda/Unknown", "content-length": "\(byteBuffer?.readableBytes ?? 0)", ] } else { - NewLambdaRuntimeClient.streamingHeaders + self.streamingHeaders } let httpRequest = HTTPRequestHead( @@ -634,7 +658,7 @@ private final class LambdaChannelHandler version: .http1_1, method: .GET, uri: self.nextInvocationPath, - headers: NewLambdaRuntimeClient.defaultHeaders + headers: self.defaultHeaders ) context.write(self.wrapOutboundOut(.head(httpRequest)), promise: nil) @@ -650,7 +674,7 @@ private final class LambdaChannelHandler version: .http1_1, method: .POST, uri: url, - headers: NewLambdaRuntimeClient.errorHeaders + headers: self.errorHeaders ) if self.reusableErrorBuffer == nil { @@ -797,22 +821,3 @@ extension LambdaChannelHandler: ChannelInboundHandler { context.fireChannelInactive() } } - -extension NewLambdaRuntimeClient { - static let defaultHeaders: HTTPHeaders = [ - "user-agent": "Swift-Lambda/Unknown" - ] - - /// These headers must be sent along an invocation or initialization error report - static let errorHeaders: HTTPHeaders = [ - "user-agent": "Swift-Lambda/Unknown", - "lambda-runtime-function-error-type": "Unhandled", - ] - - /// These headers must be sent along an invocation or initialization error report - static let streamingHeaders: HTTPHeaders = [ - "user-agent": "Swift-Lambda/Unknown", - "transfer-encoding": "streaming", - ] - -} diff --git a/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeError.swift b/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeError.swift index 2468ef99..02a4d8b8 100644 --- a/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeError.swift +++ b/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeError.swift @@ -29,6 +29,9 @@ package struct NewLambdaRuntimeError: Error { case nextInvocationMissingHeaderDeadline case nextInvocationMissingHeaderInvokeFuctionARN + case missingLambdaRuntimeAPIEnvironmentVariable + case runtimeCanOnlyBeStartedOnce + case invalidPort } package init(code: Code, underlying: (any Error)? = nil) { From 2abd9b5d3335add38d9eac50c85e347d436cb8f6 Mon Sep 17 00:00:00 2001 From: aryan-25 Date: Thu, 5 Sep 2024 15:00:19 +0100 Subject: [PATCH 030/177] Remove "New" prefix from v2 additions (#357) --- .../AWSLambdaRuntime/Context+Foundation.swift | 2 +- Sources/AWSLambdaRuntime/Lambda+Codable.swift | 10 ++-- .../ControlPlaneRequest.swift | 8 +-- Sources/AWSLambdaRuntimeCore/Lambda.swift | 35 ++++++++++- ...ambdaContext.swift => LambdaContext.swift} | 6 +- ...bdaHandlers.swift => LambdaHandlers.swift} | 54 ++++++++--------- ...ambdaRuntime.swift => LambdaRuntime.swift} | 10 ++-- ...Client.swift => LambdaRuntimeClient.swift} | 58 +++++++++---------- ...meError.swift => LambdaRuntimeError.swift} | 2 +- .../AWSLambdaRuntimeCore/NewLambda+JSON.swift | 16 ++--- Sources/AWSLambdaRuntimeCore/NewLambda.swift | 51 ---------------- .../LambdaRunLoopTests.swift | 4 +- ...s.swift => LambdaRuntimeClientTests.swift} | 6 +- .../NewLambda+CodableTests.swift | 2 +- 14 files changed, 123 insertions(+), 141 deletions(-) rename Sources/AWSLambdaRuntimeCore/{NewLambdaContext.swift => LambdaContext.swift} (97%) rename Sources/AWSLambdaRuntimeCore/{NewLambdaHandlers.swift => LambdaHandlers.swift} (84%) rename Sources/AWSLambdaRuntimeCore/{NewLambdaRuntime.swift => LambdaRuntime.swift} (83%) rename Sources/AWSLambdaRuntimeCore/{NewLambdaRuntimeClient.swift => LambdaRuntimeClient.swift} (93%) rename Sources/AWSLambdaRuntimeCore/{NewLambdaRuntimeError.swift => LambdaRuntimeError.swift} (96%) delete mode 100644 Sources/AWSLambdaRuntimeCore/NewLambda.swift rename Tests/AWSLambdaRuntimeCoreTests/{NewLambdaRuntimeClientTests.swift => LambdaRuntimeClientTests.swift} (93%) diff --git a/Sources/AWSLambdaRuntime/Context+Foundation.swift b/Sources/AWSLambdaRuntime/Context+Foundation.swift index f2fa9a75..a83237a7 100644 --- a/Sources/AWSLambdaRuntime/Context+Foundation.swift +++ b/Sources/AWSLambdaRuntime/Context+Foundation.swift @@ -16,7 +16,7 @@ import AWSLambdaRuntimeCore import struct Foundation.Date -extension NewLambdaContext { +extension LambdaContext { var deadlineDate: Date { let secondsSinceEpoch = Double(Int64(bitPattern: self.deadline.rawValue)) / -1_000_000_000 return Date(timeIntervalSince1970: secondsSinceEpoch) diff --git a/Sources/AWSLambdaRuntime/Lambda+Codable.swift b/Sources/AWSLambdaRuntime/Lambda+Codable.swift index 1f59b8f7..6751afe9 100644 --- a/Sources/AWSLambdaRuntime/Lambda+Codable.swift +++ b/Sources/AWSLambdaRuntime/Lambda+Codable.swift @@ -66,13 +66,13 @@ extension LambdaCodableAdapter { } } -extension NewLambdaRuntime { - /// Initialize an instance with a ``NewLambdaHandler`` defined in the form of a closure **with a non-`Void` return type**. +extension LambdaRuntime { + /// Initialize an instance with a ``LambdaHandler`` defined in the form of a closure **with a non-`Void` return type**. /// - Parameter body: The handler in the form of a closure. /// - Parameter encoder: The encoder object that will be used to encode the generic ``Output`` into a ``ByteBuffer``. ``JSONEncoder()`` used as default. /// - Parameter decoder: The decoder object that will be used to decode the incoming ``ByteBuffer`` event into the generic ``Event`` type. ``JSONDecoder()`` used as default. package convenience init( - body: @escaping (Event, NewLambdaContext) async throws -> Output, + body: @escaping (Event, LambdaContext) async throws -> Output, encoder: JSONEncoder = JSONEncoder(), decoder: JSONDecoder = JSONDecoder() ) @@ -94,11 +94,11 @@ extension NewLambdaRuntime { self.init(handler: handler) } - /// Initialize an instance with a ``NewLambdaHandler`` defined in the form of a closure **with a `Void` return type**. + /// Initialize an instance with a ``LambdaHandler`` defined in the form of a closure **with a `Void` return type**. /// - Parameter body: The handler in the form of a closure. /// - Parameter decoder: The decoder object that will be used to decode the incoming ``ByteBuffer`` event into the generic ``Event`` type. ``JSONDecoder()`` used as default. package convenience init( - body: @escaping (Event, NewLambdaContext) async throws -> Void, + body: @escaping (Event, LambdaContext) async throws -> Void, decoder: JSONDecoder = JSONDecoder() ) where diff --git a/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift b/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift index 6748d526..29016b0e 100644 --- a/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift +++ b/Sources/AWSLambdaRuntimeCore/ControlPlaneRequest.swift @@ -36,19 +36,19 @@ package struct InvocationMetadata: Hashable { package let clientContext: String? package let cognitoIdentity: String? - package init(headers: HTTPHeaders) throws(NewLambdaRuntimeError) { + package init(headers: HTTPHeaders) throws(LambdaRuntimeError) { guard let requestID = headers.first(name: AmazonHeaders.requestID), !requestID.isEmpty else { - throw NewLambdaRuntimeError(code: .nextInvocationMissingHeaderRequestID) + throw LambdaRuntimeError(code: .nextInvocationMissingHeaderRequestID) } guard let deadline = headers.first(name: AmazonHeaders.deadline), let unixTimeInMilliseconds = Int64(deadline) else { - throw NewLambdaRuntimeError(code: .nextInvocationMissingHeaderDeadline) + throw LambdaRuntimeError(code: .nextInvocationMissingHeaderDeadline) } guard let invokedFunctionARN = headers.first(name: AmazonHeaders.invokedFunctionARN) else { - throw NewLambdaRuntimeError(code: .nextInvocationMissingHeaderInvokeFuctionARN) + throw LambdaRuntimeError(code: .nextInvocationMissingHeaderInvokeFuctionARN) } self.requestID = requestID diff --git a/Sources/AWSLambdaRuntimeCore/Lambda.swift b/Sources/AWSLambdaRuntimeCore/Lambda.swift index 267a14c3..86ee912b 100644 --- a/Sources/AWSLambdaRuntimeCore/Lambda.swift +++ b/Sources/AWSLambdaRuntimeCore/Lambda.swift @@ -12,6 +12,7 @@ // //===----------------------------------------------------------------------===// +import Dispatch import Logging import NIOCore import NIOPosix @@ -28,7 +29,39 @@ import ucrt #error("Unsupported platform") #endif -enum Lambda {} +enum Lambda { + package static func runLoop( + runtimeClient: RuntimeClient, + handler: Handler, + logger: Logger + ) async throws where Handler: StreamingLambdaHandler { + var handler = handler + + while !Task.isCancelled { + let (invocation, writer) = try await runtimeClient.nextInvocation() + + do { + try await handler.handle( + invocation.event, + responseWriter: writer, + context: LambdaContext( + requestID: invocation.metadata.requestID, + traceID: invocation.metadata.traceID, + invokedFunctionARN: invocation.metadata.invokedFunctionARN, + deadline: DispatchWallTime(millisSinceEpoch: invocation.metadata.deadlineInMillisSinceEpoch), + logger: logger + ) + ) + } catch { + try await writer.reportError(error) + continue + } + } + } + + /// The default EventLoop the Lambda is scheduled on. + package static var defaultEventLoop: any EventLoop = NIOSingletons.posixEventLoopGroup.next() +} // MARK: - Public API diff --git a/Sources/AWSLambdaRuntimeCore/NewLambdaContext.swift b/Sources/AWSLambdaRuntimeCore/LambdaContext.swift similarity index 97% rename from Sources/AWSLambdaRuntimeCore/NewLambdaContext.swift rename to Sources/AWSLambdaRuntimeCore/LambdaContext.swift index abd2e61f..a2236618 100644 --- a/Sources/AWSLambdaRuntimeCore/NewLambdaContext.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaContext.swift @@ -20,7 +20,7 @@ import NIOCore /// Lambda runtime context. /// The Lambda runtime generates and passes the `LambdaContext` to the Lambda handler as an argument. -package struct NewLambdaContext: CustomDebugStringConvertible, Sendable { +package struct LambdaContext: CustomDebugStringConvertible, Sendable { final class _Storage: Sendable { let requestID: String let traceID: String @@ -127,8 +127,8 @@ package struct NewLambdaContext: CustomDebugStringConvertible, Sendable { invokedFunctionARN: String, timeout: DispatchTimeInterval, logger: Logger - ) -> NewLambdaContext { - NewLambdaContext( + ) -> LambdaContext { + LambdaContext( requestID: requestID, traceID: traceID, invokedFunctionARN: invokedFunctionARN, diff --git a/Sources/AWSLambdaRuntimeCore/NewLambdaHandlers.swift b/Sources/AWSLambdaRuntimeCore/LambdaHandlers.swift similarity index 84% rename from Sources/AWSLambdaRuntimeCore/NewLambdaHandlers.swift rename to Sources/AWSLambdaRuntimeCore/LambdaHandlers.swift index 2464a486..9637f0ea 100644 --- a/Sources/AWSLambdaRuntimeCore/NewLambdaHandlers.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaHandlers.swift @@ -26,7 +26,7 @@ package protocol StreamingLambdaHandler { /// - event: The invocation's input data. /// - responseWriter: A ``LambdaResponseStreamWriter`` to write the invocation's response to. /// If no response or error is written to `responseWriter` an error will be reported to the invoker. - /// - context: The ``NewLambdaContext`` containing the invocation's metadata. + /// - context: The ``LambdaContext`` containing the invocation's metadata. /// - Throws: /// How the thrown error will be handled by the runtime: /// - An invocation error will be reported if the error is thrown before the first call to @@ -39,7 +39,7 @@ package protocol StreamingLambdaHandler { mutating func handle( _ event: ByteBuffer, responseWriter: some LambdaResponseStreamWriter, - context: NewLambdaContext + context: LambdaContext ) async throws } @@ -64,7 +64,7 @@ package protocol LambdaResponseStreamWriter { /// /// - note: This handler protocol does not support response streaming because the output has to be encoded prior to it being sent, e.g. it is not possible to encode a partial/incomplete JSON string. /// This protocol also does not support the execution of background work after the response has been returned -- the ``LambdaWithBackgroundProcessingHandler`` protocol caters for such use-cases. -package protocol NewLambdaHandler { +package protocol LambdaHandler { /// Generic input type. /// The body of the request sent to Lambda will be decoded into this type for the handler to consume. associatedtype Event: Decodable @@ -75,12 +75,12 @@ package protocol NewLambdaHandler { /// Implement the business logic of the Lambda function here. /// - Parameters: /// - event: The generic ``Event`` object representing the invocation's input data. - /// - context: The ``NewLambdaContext`` containing the invocation's metadata. + /// - context: The ``LambdaContext`` containing the invocation's metadata. /// - Returns: A generic ``Output`` object representing the computed result. - func handle(_ event: Event, context: NewLambdaContext) async throws -> Output + func handle(_ event: Event, context: LambdaContext) async throws -> Output } -/// This protocol is exactly like ``NewLambdaHandler``, with the only difference being the added support for executing background +/// This protocol is exactly like ``LambdaHandler``, with the only difference being the added support for executing background /// work after the result has been sent to the AWS Lambda control plane. /// This is achieved by not having a return type in the `handle` function. The output is instead written into a /// ``LambdaResponseWriter``that is passed in as an argument, meaning that the ``handle(_:)`` function is then free to implement @@ -98,11 +98,11 @@ package protocol LambdaWithBackgroundProcessingHandler { /// - event: The generic ``Event`` object representing the invocation's input data. /// - outputWriter: The writer to send the computed response to. A call to `outputWriter.write(_:)` will return the response to the AWS Lambda response endpoint. /// Any background work can then be executed before returning. - /// - context: The ``NewLambdaContext`` containing the invocation's metadata. + /// - context: The ``LambdaContext`` containing the invocation's metadata. func handle( _ event: Event, outputWriter: some LambdaResponseWriter, - context: NewLambdaContext + context: LambdaContext ) async throws } @@ -121,67 +121,67 @@ package protocol LambdaResponseWriter { /// A ``StreamingLambdaHandler`` conforming handler object that can be constructed with a closure. /// Allows for a handler to be defined in a clean manner, leveraging Swift's trailing closure syntax. package struct StreamingClosureHandler: StreamingLambdaHandler { - let body: @Sendable (ByteBuffer, LambdaResponseStreamWriter, NewLambdaContext) async throws -> Void + let body: @Sendable (ByteBuffer, LambdaResponseStreamWriter, LambdaContext) async throws -> Void /// Initialize an instance from a handler function in the form of a closure. /// - Parameter body: The handler function written as a closure. package init( - body: @Sendable @escaping (ByteBuffer, LambdaResponseStreamWriter, NewLambdaContext) async throws -> Void + body: @Sendable @escaping (ByteBuffer, LambdaResponseStreamWriter, LambdaContext) async throws -> Void ) { self.body = body } - /// Calls the provided `self.body` closure with the ``ByteBuffer`` invocation event, the ``LambdaResponseStreamWriter``, and the ``NewLambdaContext`` + /// Calls the provided `self.body` closure with the ``ByteBuffer`` invocation event, the ``LambdaResponseStreamWriter``, and the ``LambdaContext`` /// - Parameters: /// - event: The invocation's input data. /// - responseWriter: A ``LambdaResponseStreamWriter`` to write the invocation's response to. /// If no response or error is written to `responseWriter` an error will be reported to the invoker. - /// - context: The ``NewLambdaContext`` containing the invocation's metadata. + /// - context: The ``LambdaContext`` containing the invocation's metadata. package func handle( _ request: ByteBuffer, responseWriter: some LambdaResponseStreamWriter, - context: NewLambdaContext + context: LambdaContext ) async throws { try await self.body(request, responseWriter, context) } } -/// A ``NewLambdaHandler`` conforming handler object that can be constructed with a closure. +/// A ``LambdaHandler`` conforming handler object that can be constructed with a closure. /// Allows for a handler to be defined in a clean manner, leveraging Swift's trailing closure syntax. -package struct ClosureHandler: NewLambdaHandler { - let body: (Event, NewLambdaContext) async throws -> Output +package struct ClosureHandler: LambdaHandler { + let body: (Event, LambdaContext) async throws -> Output /// Initialize with a closure handler over generic `Input` and `Output` types. /// - Parameter body: The handler function written as a closure. - package init(body: @escaping (Event, NewLambdaContext) async throws -> Output) where Output: Encodable { + package init(body: @escaping (Event, LambdaContext) async throws -> Output) where Output: Encodable { self.body = body } /// Initialize with a closure handler over a generic `Input` type, and a `Void` `Output`. /// - Parameter body: The handler function written as a closure. - package init(body: @escaping (Event, NewLambdaContext) async throws -> Void) where Output == Void { + package init(body: @escaping (Event, LambdaContext) async throws -> Void) where Output == Void { self.body = body } - /// Calls the provided `self.body` closure with the generic ``Event`` object representing the incoming event, and the ``NewLambdaContext`` + /// Calls the provided `self.body` closure with the generic ``Event`` object representing the incoming event, and the ``LambdaContext`` /// - Parameters: /// - event: The generic ``Event`` object representing the invocation's input data. - /// - context: The ``NewLambdaContext`` containing the invocation's metadata. - package func handle(_ event: Event, context: NewLambdaContext) async throws -> Output { + /// - context: The ``LambdaContext`` containing the invocation's metadata. + package func handle(_ event: Event, context: LambdaContext) async throws -> Output { try await self.body(event, context) } } -extension NewLambdaRuntime { +extension LambdaRuntime { /// Initialize an instance with a ``StreamingLambdaHandler`` in the form of a closure. /// - Parameter body: The handler in the form of a closure. package convenience init( - body: @Sendable @escaping (ByteBuffer, LambdaResponseStreamWriter, NewLambdaContext) async throws -> Void + body: @Sendable @escaping (ByteBuffer, LambdaResponseStreamWriter, LambdaContext) async throws -> Void ) where Handler == StreamingClosureHandler { self.init(handler: StreamingClosureHandler(body: body)) } - /// Initialize an instance with a ``NewLambdaHandler`` defined in the form of a closure **with a non-`Void` return type**, an encoder, and a decoder. + /// Initialize an instance with a ``LambdaHandler`` defined in the form of a closure **with a non-`Void` return type**, an encoder, and a decoder. /// - Parameter body: The handler in the form of a closure. /// - Parameter encoder: The encoder object that will be used to encode the generic ``Output`` into a ``ByteBuffer``. /// - Parameter decoder: The decoder object that will be used to decode the incoming ``ByteBuffer`` event into the generic ``Event`` type. @@ -193,7 +193,7 @@ extension NewLambdaRuntime { >( encoder: Encoder, decoder: Decoder, - body: @escaping (Event, NewLambdaContext) async throws -> Output + body: @escaping (Event, LambdaContext) async throws -> Output ) where Handler == LambdaCodableAdapter< @@ -213,13 +213,13 @@ extension NewLambdaRuntime { self.init(handler: handler) } - /// Initialize an instance with a ``NewLambdaHandler`` defined in the form of a closure **with a `Void` return type**, an encoder, and a decoder. + /// Initialize an instance with a ``LambdaHandler`` defined in the form of a closure **with a `Void` return type**, an encoder, and a decoder. /// - Parameter body: The handler in the form of a closure. /// - Parameter encoder: The encoder object that will be used to encode the generic ``Output`` into a ``ByteBuffer``. /// - Parameter decoder: The decoder object that will be used to decode the incoming ``ByteBuffer`` event into the generic ``Event`` type. package convenience init( decoder: Decoder, - body: @escaping (Event, NewLambdaContext) async throws -> Void + body: @escaping (Event, LambdaContext) async throws -> Void ) where Handler == LambdaCodableAdapter< diff --git a/Sources/AWSLambdaRuntimeCore/NewLambdaRuntime.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift similarity index 83% rename from Sources/AWSLambdaRuntimeCore/NewLambdaRuntime.swift rename to Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift index 41212b22..c01215ac 100644 --- a/Sources/AWSLambdaRuntimeCore/NewLambdaRuntime.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift @@ -20,7 +20,7 @@ import NIOConcurrencyHelpers // We need `@unchecked` Sendable here, as `NIOLockedValueBox` does not understand `sending` today. // We don't want to use `NIOLockedValueBox` here anyway. We would love to use Mutex here, but this // sadly crashes the compiler today. -package final class NewLambdaRuntime: @unchecked Sendable where Handler: StreamingLambdaHandler { +package final class LambdaRuntime: @unchecked Sendable where Handler: StreamingLambdaHandler { // TODO: We want to change this to Mutex as soon as this doesn't crash the Swift compiler on Linux anymore let handlerMutex: NIOLockedValueBox> let logger: Logger @@ -38,12 +38,12 @@ package final class NewLambdaRuntime: @unchecked Sendable where Handler package func run() async throws { guard let runtimeEndpoint = Lambda.env("AWS_LAMBDA_RUNTIME_API") else { - throw NewLambdaRuntimeError(code: .missingLambdaRuntimeAPIEnvironmentVariable) + throw LambdaRuntimeError(code: .missingLambdaRuntimeAPIEnvironmentVariable) } let ipAndPort = runtimeEndpoint.split(separator: ":", maxSplits: 1) let ip = String(ipAndPort[0]) - guard let port = Int(ipAndPort[1]) else { throw NewLambdaRuntimeError(code: .invalidPort) } + guard let port = Int(ipAndPort[1]) else { throw LambdaRuntimeError(code: .invalidPort) } let handler = self.handlerMutex.withLockedValue { handler in let result = handler @@ -52,10 +52,10 @@ package final class NewLambdaRuntime: @unchecked Sendable where Handler } guard let handler else { - throw NewLambdaRuntimeError(code: .runtimeCanOnlyBeStartedOnce) + throw LambdaRuntimeError(code: .runtimeCanOnlyBeStartedOnce) } - try await NewLambdaRuntimeClient.withRuntimeClient( + try await LambdaRuntimeClient.withRuntimeClient( configuration: .init(ip: ip, port: port), eventLoop: self.eventLoop, logger: self.logger diff --git a/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeClient.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift similarity index 93% rename from Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeClient.swift rename to Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift index 46199e98..bbd16efa 100644 --- a/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeClient.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRuntimeClient.swift @@ -17,7 +17,7 @@ import NIOCore import NIOHTTP1 import NIOPosix -final actor NewLambdaRuntimeClient: LambdaRuntimeClientProtocol { +final actor LambdaRuntimeClient: LambdaRuntimeClientProtocol { nonisolated let unownedExecutor: UnownedSerialExecutor struct Configuration { @@ -26,9 +26,9 @@ final actor NewLambdaRuntimeClient: LambdaRuntimeClientProtocol { } struct Writer: LambdaRuntimeClientResponseStreamWriter { - private var runtimeClient: NewLambdaRuntimeClient + private var runtimeClient: LambdaRuntimeClient - fileprivate init(runtimeClient: NewLambdaRuntimeClient) { + fileprivate init(runtimeClient: LambdaRuntimeClient) { self.runtimeClient = runtimeClient } @@ -51,8 +51,8 @@ final actor NewLambdaRuntimeClient: LambdaRuntimeClientProtocol { private enum ConnectionState { case disconnected - case connecting([CheckedContinuation, any Error>]) - case connected(Channel, LambdaChannelHandler) + case connecting([CheckedContinuation, any Error>]) + case connected(Channel, LambdaChannelHandler) } enum LambdaState { @@ -90,9 +90,9 @@ final actor NewLambdaRuntimeClient: LambdaRuntimeClientProtocol { configuration: Configuration, eventLoop: any EventLoop, logger: Logger, - _ body: (NewLambdaRuntimeClient) async throws -> Result + _ body: (LambdaRuntimeClient) async throws -> Result ) async throws -> Result { - let runtime = NewLambdaRuntimeClient(configuration: configuration, eventLoop: eventLoop, logger: logger) + let runtime = LambdaRuntimeClient(configuration: configuration, eventLoop: eventLoop, logger: logger) let result: Swift.Result do { result = .success(try await body(runtime)) @@ -130,7 +130,7 @@ final actor NewLambdaRuntimeClient: LambdaRuntimeClientProtocol { case .connecting(let continuations): for continuation in continuations { - continuation.resume(throwing: NewLambdaRuntimeError(code: .closingRuntimeClient)) + continuation.resume(throwing: LambdaRuntimeError(code: .closingRuntimeClient)) } self.connectionState = .connecting([]) @@ -164,7 +164,7 @@ final actor NewLambdaRuntimeClient: LambdaRuntimeClientProtocol { private func write(_ buffer: NIOCore.ByteBuffer) async throws { switch self.lambdaState { case .idle, .sentResponse: - throw NewLambdaRuntimeError(code: .writeAfterFinishHasBeenSent) + throw LambdaRuntimeError(code: .writeAfterFinishHasBeenSent) case .waitingForNextInvocation: fatalError("Invalid state: \(self.lambdaState)") @@ -185,7 +185,7 @@ final actor NewLambdaRuntimeClient: LambdaRuntimeClientProtocol { private func writeAndFinish(_ buffer: NIOCore.ByteBuffer?) async throws { switch self.lambdaState { case .idle, .sentResponse: - throw NewLambdaRuntimeError(code: .finishAfterFinishHasBeenSent) + throw LambdaRuntimeError(code: .finishAfterFinishHasBeenSent) case .waitingForNextInvocation: fatalError("Invalid state: \(self.lambdaState)") @@ -252,7 +252,7 @@ final actor NewLambdaRuntimeClient: LambdaRuntimeClientProtocol { case (.connecting(let array), .notClosing): self.connectionState = .disconnected for continuation in array { - continuation.resume(throwing: NewLambdaRuntimeError(code: .lostConnectionToControlPlane)) + continuation.resume(throwing: LambdaRuntimeError(code: .lostConnectionToControlPlane)) } case (.connecting(let array), .closing(let continuation)): @@ -276,7 +276,7 @@ final actor NewLambdaRuntimeClient: LambdaRuntimeClientProtocol { } } - private func makeOrGetConnection() async throws -> LambdaChannelHandler { + private func makeOrGetConnection() async throws -> LambdaChannelHandler { switch self.connectionState { case .disconnected: self.connectionState = .connecting([]) @@ -285,7 +285,7 @@ final actor NewLambdaRuntimeClient: LambdaRuntimeClientProtocol { // Since we do get sequential invocations this case normally should never be hit. // We'll support it anyway. return try await withCheckedThrowingContinuation { - (continuation: CheckedContinuation, any Error>) in + (continuation: CheckedContinuation, any Error>) in array.append(continuation) self.connectionState = .connecting(array) } @@ -317,7 +317,7 @@ final actor NewLambdaRuntimeClient: LambdaRuntimeClientProtocol { let address = try SocketAddress(ipAddress: self.configuration.ip, port: self.configuration.port) let channel = try await bootstrap.connect(to: address).get() let handler = try channel.pipeline.syncOperations.handler( - type: LambdaChannelHandler.self + type: LambdaChannelHandler.self ) self.logger.trace( "Connection to control plane created", @@ -363,7 +363,7 @@ final actor NewLambdaRuntimeClient: LambdaRuntimeClientProtocol { } } -extension NewLambdaRuntimeClient: LambdaChannelHandlerDelegate { +extension LambdaRuntimeClient: LambdaChannelHandlerDelegate { nonisolated func connectionErrorHappened(_ error: any Error, channel: any Channel) { } @@ -384,7 +384,7 @@ extension NewLambdaRuntimeClient: LambdaChannelHandlerDelegate { } for continuation in continuations { - continuation.resume(throwing: NewLambdaRuntimeError(code: .connectionToControlPlaneLost)) + continuation.resume(throwing: LambdaRuntimeError(code: .connectionToControlPlaneLost)) } case .connected(let stateChannel, _): @@ -433,7 +433,7 @@ private final class LambdaChannelHandler private var reusableErrorBuffer: ByteBuffer? private let logger: Logger private let delegate: Delegate - private let configuration: NewLambdaRuntimeClient.Configuration + private let configuration: LambdaRuntimeClient.Configuration /// These are the default headers that must be sent along an invocation let defaultHeaders: HTTPHeaders @@ -442,7 +442,7 @@ private final class LambdaChannelHandler /// These headers must be sent when streaming a response let streamingHeaders: HTTPHeaders - init(delegate: Delegate, logger: Logger, configuration: NewLambdaRuntimeClient.Configuration) { + init(delegate: Delegate, logger: Logger, configuration: LambdaRuntimeClient.Configuration) { self.delegate = delegate self.logger = logger self.configuration = configuration @@ -479,7 +479,7 @@ private final class LambdaChannelHandler fatalError("Invalid state: \(self.state)") case .disconnected: - throw NewLambdaRuntimeError(code: .connectionToControlPlaneLost) + throw LambdaRuntimeError(code: .connectionToControlPlaneLost) } } @@ -518,10 +518,10 @@ private final class LambdaChannelHandler ) case .disconnected: - throw NewLambdaRuntimeError(code: .connectionToControlPlaneLost) + throw LambdaRuntimeError(code: .connectionToControlPlaneLost) case .closing: - throw NewLambdaRuntimeError(code: .connectionToControlPlaneGoingAway) + throw LambdaRuntimeError(code: .connectionToControlPlaneGoingAway) } } @@ -543,13 +543,13 @@ private final class LambdaChannelHandler case .connected(_, .idle), .connected(_, .sentResponse): - throw NewLambdaRuntimeError(code: .writeAfterFinishHasBeenSent) + throw LambdaRuntimeError(code: .writeAfterFinishHasBeenSent) case .disconnected: - throw NewLambdaRuntimeError(code: .connectionToControlPlaneLost) + throw LambdaRuntimeError(code: .connectionToControlPlaneLost) case .closing: - throw NewLambdaRuntimeError(code: .connectionToControlPlaneGoingAway) + throw LambdaRuntimeError(code: .connectionToControlPlaneGoingAway) } } @@ -576,13 +576,13 @@ private final class LambdaChannelHandler } case .connected(_, .sentResponse): - throw NewLambdaRuntimeError(code: .finishAfterFinishHasBeenSent) + throw LambdaRuntimeError(code: .finishAfterFinishHasBeenSent) case .disconnected: - throw NewLambdaRuntimeError(code: .connectionToControlPlaneLost) + throw LambdaRuntimeError(code: .connectionToControlPlaneLost) case .closing: - throw NewLambdaRuntimeError(code: .connectionToControlPlaneGoingAway) + throw LambdaRuntimeError(code: .connectionToControlPlaneGoingAway) } } @@ -749,7 +749,7 @@ extension LambdaChannelHandler: ChannelInboundHandler { self.delegate.connectionWillClose(channel: context.channel) context.close(promise: nil) continuation.resume( - throwing: NewLambdaRuntimeError(code: .invocationMissingMetadata, underlying: error) + throwing: LambdaRuntimeError(code: .invocationMissingMetadata, underlying: error) ) } @@ -759,7 +759,7 @@ extension LambdaChannelHandler: ChannelInboundHandler { continuation.resume() } else { self.state = .connected(context, .idle) - continuation.resume(throwing: NewLambdaRuntimeError(code: .unexpectedStatusCodeForRequest)) + continuation.resume(throwing: LambdaRuntimeError(code: .unexpectedStatusCodeForRequest)) } case .disconnected, .closing, .connected(_, _): diff --git a/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeError.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntimeError.swift similarity index 96% rename from Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeError.swift rename to Sources/AWSLambdaRuntimeCore/LambdaRuntimeError.swift index 02a4d8b8..a6b4ac66 100644 --- a/Sources/AWSLambdaRuntimeCore/NewLambdaRuntimeError.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRuntimeError.swift @@ -12,7 +12,7 @@ // //===----------------------------------------------------------------------===// -package struct NewLambdaRuntimeError: Error { +package struct LambdaRuntimeError: Error { package enum Code { case closingRuntimeClient diff --git a/Sources/AWSLambdaRuntimeCore/NewLambda+JSON.swift b/Sources/AWSLambdaRuntimeCore/NewLambda+JSON.swift index 4475a81f..b0d6b313 100644 --- a/Sources/AWSLambdaRuntimeCore/NewLambda+JSON.swift +++ b/Sources/AWSLambdaRuntimeCore/NewLambda+JSON.swift @@ -45,32 +45,32 @@ package struct VoidEncoder: LambdaOutputEncoder { package func encode(_ value: Void, into buffer: inout NIOCore.ByteBuffer) throws {} } -/// Adapts a ``NewLambdaHandler`` conforming handler to conform to ``LambdaWithBackgroundProcessingHandler``. +/// Adapts a ``LambdaHandler`` conforming handler to conform to ``LambdaWithBackgroundProcessingHandler``. package struct LambdaHandlerAdapter< Event: Decodable, Output, - Handler: NewLambdaHandler + Handler: LambdaHandler >: LambdaWithBackgroundProcessingHandler where Handler.Event == Event, Handler.Output == Output { @usableFromInline let handler: Handler /// Initializes an instance given a concrete handler. - /// - Parameter handler: The ``NewLambdaHandler`` conforming handler that is to be adapted to ``LambdaWithBackgroundProcessingHandler``. + /// - Parameter handler: The ``LambdaHandler`` conforming handler that is to be adapted to ``LambdaWithBackgroundProcessingHandler``. @inlinable package init(handler: Handler) { self.handler = handler } - /// Passes the generic ``Event`` object to the ``NewLambdaHandler/handle(_:context:)`` function, and + /// Passes the generic ``Event`` object to the ``LambdaHandler/handle(_:context:)`` function, and /// the resulting output is then written to ``LambdaWithBackgroundProcessingHandler``'s `outputWriter`. /// - Parameters: /// - event: The received event. /// - outputWriter: The writer to write the computed response to. - /// - context: The ``NewLambdaContext`` containing the invocation's metadata. + /// - context: The ``LambdaContext`` containing the invocation's metadata. @inlinable package func handle( _ event: Event, outputWriter: some LambdaResponseWriter, - context: NewLambdaContext + context: LambdaContext ) async throws { let output = try await self.handler.handle(event, context: context) try await outputWriter.write(output) @@ -118,12 +118,12 @@ package struct LambdaCodableAdapter< /// - Parameters: /// - event: The received event. /// - outputWriter: The writer to write the computed response to. - /// - context: The ``NewLambdaContext`` containing the invocation's metadata. + /// - context: The ``LambdaContext`` containing the invocation's metadata. @inlinable package mutating func handle( _ request: ByteBuffer, responseWriter: Writer, - context: NewLambdaContext + context: LambdaContext ) async throws { let event = try self.decoder.decode(Event.self, from: request) diff --git a/Sources/AWSLambdaRuntimeCore/NewLambda.swift b/Sources/AWSLambdaRuntimeCore/NewLambda.swift deleted file mode 100644 index d72df20b..00000000 --- a/Sources/AWSLambdaRuntimeCore/NewLambda.swift +++ /dev/null @@ -1,51 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import Dispatch -import Logging -import NIOCore - -extension Lambda { - package static func runLoop( - runtimeClient: RuntimeClient, - handler: Handler, - logger: Logger - ) async throws where Handler: StreamingLambdaHandler { - var handler = handler - - while !Task.isCancelled { - let (invocation, writer) = try await runtimeClient.nextInvocation() - - do { - try await handler.handle( - invocation.event, - responseWriter: writer, - context: NewLambdaContext( - requestID: invocation.metadata.requestID, - traceID: invocation.metadata.traceID, - invokedFunctionARN: invocation.metadata.invokedFunctionARN, - deadline: DispatchWallTime(millisSinceEpoch: invocation.metadata.deadlineInMillisSinceEpoch), - logger: logger - ) - ) - } catch { - try await writer.reportError(error) - continue - } - } - } - - /// The default EventLoop the Lambda is scheduled on. - package static var defaultEventLoop: any EventLoop = NIOSingletons.posixEventLoopGroup.next() -} diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaRunLoopTests.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaRunLoopTests.swift index d85d7f92..741bbf50 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/LambdaRunLoopTests.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/LambdaRunLoopTests.swift @@ -25,7 +25,7 @@ struct LambdaRunLoopTests { func handle( _ event: ByteBuffer, responseWriter: some LambdaResponseStreamWriter, - context: NewLambdaContext + context: LambdaContext ) async throws { try await responseWriter.writeAndFinish(event) } @@ -35,7 +35,7 @@ struct LambdaRunLoopTests { func handle( _ event: ByteBuffer, responseWriter: some LambdaResponseStreamWriter, - context: NewLambdaContext + context: LambdaContext ) async throws { throw LambdaError.handlerError } diff --git a/Tests/AWSLambdaRuntimeCoreTests/NewLambdaRuntimeClientTests.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeClientTests.swift similarity index 93% rename from Tests/AWSLambdaRuntimeCoreTests/NewLambdaRuntimeClientTests.swift rename to Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeClientTests.swift index 023c13a0..e779b931 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/NewLambdaRuntimeClientTests.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/LambdaRuntimeClientTests.swift @@ -22,7 +22,7 @@ import struct Foundation.UUID @testable import AWSLambdaRuntimeCore @Suite -struct NewLambdaRuntimeClientTests { +struct LambdaRuntimeClientTests { let logger = { var logger = Logger(label: "NewLambdaClientRuntimeTest") @@ -58,9 +58,9 @@ struct NewLambdaRuntimeClientTests { } try await withMockServer(behaviour: HappyBehavior()) { port in - let configuration = NewLambdaRuntimeClient.Configuration(ip: "127.0.0.1", port: port) + let configuration = LambdaRuntimeClient.Configuration(ip: "127.0.0.1", port: port) - try await NewLambdaRuntimeClient.withRuntimeClient( + try await LambdaRuntimeClient.withRuntimeClient( configuration: configuration, eventLoop: NIOSingletons.posixEventLoopGroup.next(), logger: self.logger diff --git a/Tests/AWSLambdaRuntimeTests/NewLambda+CodableTests.swift b/Tests/AWSLambdaRuntimeTests/NewLambda+CodableTests.swift index 08e55f36..35d56225 100644 --- a/Tests/AWSLambdaRuntimeTests/NewLambda+CodableTests.swift +++ b/Tests/AWSLambdaRuntimeTests/NewLambda+CodableTests.swift @@ -62,7 +62,7 @@ struct JSONTests { let event = ByteBuffer(string: #"{"bar":"baz"}"#) let writer = MockLambdaWriter() - let context = NewLambdaContext.__forTestsOnly( + let context = LambdaContext.__forTestsOnly( requestID: UUID().uuidString, traceID: UUID().uuidString, invokedFunctionARN: "arn:", From 435033e6a4e61febf3b9b359fda2bf0a2cc63a2f Mon Sep 17 00:00:00 2001 From: aryan-25 Date: Thu, 5 Sep 2024 17:44:01 +0100 Subject: [PATCH 031/177] Make v2 API functions and types public (#358) --- Sources/AWSLambdaRuntime/Lambda+Codable.swift | 13 ++++---- ...Lambda+JSON.swift => Lambda+Codable.swift} | 33 ++++++++++--------- Sources/AWSLambdaRuntimeCore/Lambda.swift | 4 +-- .../AWSLambdaRuntimeCore/LambdaContext.swift | 20 +++++------ .../AWSLambdaRuntimeCore/LambdaHandlers.swift | 30 ++++++++--------- .../AWSLambdaRuntimeCore/LambdaRuntime.swift | 6 ++-- 6 files changed, 53 insertions(+), 53 deletions(-) rename Sources/AWSLambdaRuntimeCore/{NewLambda+JSON.swift => Lambda+Codable.swift} (87%) diff --git a/Sources/AWSLambdaRuntime/Lambda+Codable.swift b/Sources/AWSLambdaRuntime/Lambda+Codable.swift index 6751afe9..531eb96b 100644 --- a/Sources/AWSLambdaRuntime/Lambda+Codable.swift +++ b/Sources/AWSLambdaRuntime/Lambda+Codable.swift @@ -26,17 +26,16 @@ import class Foundation.JSONEncoder extension JSONDecoder: AWSLambdaRuntimeCore.LambdaEventDecoder {} -@usableFromInline -package struct LambdaJSONOutputEncoder: LambdaOutputEncoder { +public struct LambdaJSONOutputEncoder: LambdaOutputEncoder { @usableFromInline let jsonEncoder: JSONEncoder @inlinable - package init(_ jsonEncoder: JSONEncoder) { + public init(_ jsonEncoder: JSONEncoder) { self.jsonEncoder = jsonEncoder } @inlinable - package func encode(_ value: Output, into buffer: inout ByteBuffer) throws { + public func encode(_ value: Output, into buffer: inout ByteBuffer) throws { try self.jsonEncoder.encode(value, into: &buffer) } } @@ -47,7 +46,7 @@ extension LambdaCodableAdapter { /// - encoder: The encoder object that will be used to encode the generic ``Output`` obtained from the `handler`'s `outputWriter` into a ``ByteBuffer``. /// - decoder: The decoder object that will be used to decode the received ``ByteBuffer`` event into the generic ``Event`` type served to the `handler`. /// - handler: The handler object. - package init( + public init( encoder: JSONEncoder, decoder: JSONDecoder, handler: Handler @@ -71,7 +70,7 @@ extension LambdaRuntime { /// - Parameter body: The handler in the form of a closure. /// - Parameter encoder: The encoder object that will be used to encode the generic ``Output`` into a ``ByteBuffer``. ``JSONEncoder()`` used as default. /// - Parameter decoder: The decoder object that will be used to decode the incoming ``ByteBuffer`` event into the generic ``Event`` type. ``JSONDecoder()`` used as default. - package convenience init( + public convenience init( body: @escaping (Event, LambdaContext) async throws -> Output, encoder: JSONEncoder = JSONEncoder(), decoder: JSONDecoder = JSONDecoder() @@ -97,7 +96,7 @@ extension LambdaRuntime { /// Initialize an instance with a ``LambdaHandler`` defined in the form of a closure **with a `Void` return type**. /// - Parameter body: The handler in the form of a closure. /// - Parameter decoder: The decoder object that will be used to decode the incoming ``ByteBuffer`` event into the generic ``Event`` type. ``JSONDecoder()`` used as default. - package convenience init( + public convenience init( body: @escaping (Event, LambdaContext) async throws -> Void, decoder: JSONDecoder = JSONDecoder() ) diff --git a/Sources/AWSLambdaRuntimeCore/NewLambda+JSON.swift b/Sources/AWSLambdaRuntimeCore/Lambda+Codable.swift similarity index 87% rename from Sources/AWSLambdaRuntimeCore/NewLambda+JSON.swift rename to Sources/AWSLambdaRuntimeCore/Lambda+Codable.swift index b0d6b313..fdc4c0b4 100644 --- a/Sources/AWSLambdaRuntimeCore/NewLambda+JSON.swift +++ b/Sources/AWSLambdaRuntimeCore/Lambda+Codable.swift @@ -16,7 +16,7 @@ import NIOCore /// The protocol a decoder must conform to so that it can be used with ``LambdaCodableAdapter`` to decode incoming /// ``ByteBuffer`` events. -package protocol LambdaEventDecoder { +public protocol LambdaEventDecoder { /// Decode the ``ByteBuffer`` representing the received event into the generic ``Event`` type /// the handler will receive. /// - Parameters: @@ -28,7 +28,7 @@ package protocol LambdaEventDecoder { /// The protocol an encoder must conform to so that it can be used with ``LambdaCodableAdapter`` to encode the generic /// ``Output`` object into a ``ByteBuffer``. -package protocol LambdaOutputEncoder { +public protocol LambdaOutputEncoder { associatedtype Output /// Encode the generic type `Output` the handler has returned into a ``ByteBuffer``. @@ -38,15 +38,17 @@ package protocol LambdaOutputEncoder { func encode(_ value: Output, into buffer: inout ByteBuffer) throws } -package struct VoidEncoder: LambdaOutputEncoder { - package typealias Output = Void +public struct VoidEncoder: LambdaOutputEncoder { + public typealias Output = Void + + public init() {} @inlinable - package func encode(_ value: Void, into buffer: inout NIOCore.ByteBuffer) throws {} + public func encode(_ value: Void, into buffer: inout NIOCore.ByteBuffer) throws {} } /// Adapts a ``LambdaHandler`` conforming handler to conform to ``LambdaWithBackgroundProcessingHandler``. -package struct LambdaHandlerAdapter< +public struct LambdaHandlerAdapter< Event: Decodable, Output, Handler: LambdaHandler @@ -56,7 +58,7 @@ package struct LambdaHandlerAdapter< /// Initializes an instance given a concrete handler. /// - Parameter handler: The ``LambdaHandler`` conforming handler that is to be adapted to ``LambdaWithBackgroundProcessingHandler``. @inlinable - package init(handler: Handler) { + public init(handler: Handler) { self.handler = handler } @@ -67,7 +69,7 @@ package struct LambdaHandlerAdapter< /// - outputWriter: The writer to write the computed response to. /// - context: The ``LambdaContext`` containing the invocation's metadata. @inlinable - package func handle( + public func handle( _ event: Event, outputWriter: some LambdaResponseWriter, context: LambdaContext @@ -78,7 +80,7 @@ package struct LambdaHandlerAdapter< } /// Adapts a ``LambdaWithBackgroundProcessingHandler`` conforming handler to conform to ``StreamingLambdaHandler``. -package struct LambdaCodableAdapter< +public struct LambdaCodableAdapter< Handler: LambdaWithBackgroundProcessingHandler, Event: Decodable, Output, @@ -88,7 +90,6 @@ package struct LambdaCodableAdapter< @usableFromInline let handler: Handler @usableFromInline let encoder: Encoder @usableFromInline let decoder: Decoder - // @usableFromInline var byteBuffer: ByteBuffer = .init() /// Initializes an instance given an encoder, decoder, and a handler with a non-`Void` output. @@ -97,7 +98,7 @@ package struct LambdaCodableAdapter< /// - decoder: The decoder object that will be used to decode the received ``ByteBuffer`` event into the generic ``Event`` type served to the `handler`. /// - handler: The handler object. @inlinable - package init(encoder: Encoder, decoder: Decoder, handler: Handler) where Output: Encodable { + public init(encoder: Encoder, decoder: Decoder, handler: Handler) where Output: Encodable { self.encoder = encoder self.decoder = decoder self.handler = handler @@ -108,7 +109,7 @@ package struct LambdaCodableAdapter< /// - decoder: The decoder object that will be used to decode the received ``ByteBuffer`` event into the generic ``Event`` type served to the `handler`. /// - handler: The handler object. @inlinable - package init(decoder: Decoder, handler: Handler) where Output == Void, Encoder == VoidEncoder { + public init(decoder: Decoder, handler: Handler) where Output == Void, Encoder == VoidEncoder { self.encoder = VoidEncoder() self.decoder = decoder self.handler = handler @@ -120,7 +121,7 @@ package struct LambdaCodableAdapter< /// - outputWriter: The writer to write the computed response to. /// - context: The ``LambdaContext`` containing the invocation's metadata. @inlinable - package mutating func handle( + public mutating func handle( _ request: ByteBuffer, responseWriter: Writer, context: LambdaContext @@ -136,7 +137,7 @@ package struct LambdaCodableAdapter< } /// A ``LambdaResponseStreamWriter`` wrapper that conforms to ``LambdaResponseWriter``. -package struct LambdaCodableResponseWriter: +public struct LambdaCodableResponseWriter: LambdaResponseWriter where Output == Encoder.Output { @usableFromInline let underlyingStreamWriter: Base @@ -147,13 +148,13 @@ where Output == Encoder.Output { /// - encoder: The encoder object that will be used to encode the generic ``Output`` into a ``ByteBuffer``, which will then be passed to `streamWriter`. /// - streamWriter: The underlying ``LambdaResponseStreamWriter`` that will be wrapped. @inlinable - package init(encoder: Encoder, streamWriter: Base) { + public init(encoder: Encoder, streamWriter: Base) { self.encoder = encoder self.underlyingStreamWriter = streamWriter } @inlinable - package func write(_ output: Output) async throws { + public func write(_ output: Output) async throws { var outputBuffer = ByteBuffer() try self.encoder.encode(output, into: &outputBuffer) try await self.underlyingStreamWriter.writeAndFinish(outputBuffer) diff --git a/Sources/AWSLambdaRuntimeCore/Lambda.swift b/Sources/AWSLambdaRuntimeCore/Lambda.swift index 86ee912b..87026693 100644 --- a/Sources/AWSLambdaRuntimeCore/Lambda.swift +++ b/Sources/AWSLambdaRuntimeCore/Lambda.swift @@ -29,7 +29,7 @@ import ucrt #error("Unsupported platform") #endif -enum Lambda { +public enum Lambda { package static func runLoop( runtimeClient: RuntimeClient, handler: Handler, @@ -60,7 +60,7 @@ enum Lambda { } /// The default EventLoop the Lambda is scheduled on. - package static var defaultEventLoop: any EventLoop = NIOSingletons.posixEventLoopGroup.next() + public static var defaultEventLoop: any EventLoop = NIOSingletons.posixEventLoopGroup.next() } // MARK: - Public API diff --git a/Sources/AWSLambdaRuntimeCore/LambdaContext.swift b/Sources/AWSLambdaRuntimeCore/LambdaContext.swift index a2236618..291a732d 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaContext.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaContext.swift @@ -20,7 +20,7 @@ import NIOCore /// Lambda runtime context. /// The Lambda runtime generates and passes the `LambdaContext` to the Lambda handler as an argument. -package struct LambdaContext: CustomDebugStringConvertible, Sendable { +public struct LambdaContext: CustomDebugStringConvertible, Sendable { final class _Storage: Sendable { let requestID: String let traceID: String @@ -52,39 +52,39 @@ package struct LambdaContext: CustomDebugStringConvertible, Sendable { private var storage: _Storage /// The request ID, which identifies the request that triggered the function invocation. - package var requestID: String { + public var requestID: String { self.storage.requestID } /// The AWS X-Ray tracing header. - package var traceID: String { + public var traceID: String { self.storage.traceID } /// The ARN of the Lambda function, version, or alias that's specified in the invocation. - package var invokedFunctionARN: String { + public var invokedFunctionARN: String { self.storage.invokedFunctionARN } /// The timestamp that the function times out. - package var deadline: DispatchWallTime { + public var deadline: DispatchWallTime { self.storage.deadline } /// For invocations from the AWS Mobile SDK, data about the Amazon Cognito identity provider. - package var cognitoIdentity: String? { + public var cognitoIdentity: String? { self.storage.cognitoIdentity } /// For invocations from the AWS Mobile SDK, data about the client application and device. - package var clientContext: String? { + public var clientContext: String? { self.storage.clientContext } /// `Logger` to log with. /// /// - note: The `LogLevel` can be configured using the `LOG_LEVEL` environment variable. - package var logger: Logger { + public var logger: Logger { self.storage.logger } @@ -108,7 +108,7 @@ package struct LambdaContext: CustomDebugStringConvertible, Sendable { ) } - package func getRemainingTime() -> TimeAmount { + public func getRemainingTime() -> Duration { let deadline = self.deadline.millisSinceEpoch let now = DispatchWallTime.now().millisSinceEpoch @@ -116,7 +116,7 @@ package struct LambdaContext: CustomDebugStringConvertible, Sendable { return .milliseconds(remaining) } - package var debugDescription: String { + public var debugDescription: String { "\(Self.self)(requestID: \(self.requestID), traceID: \(self.traceID), invokedFunctionARN: \(self.invokedFunctionARN), cognitoIdentity: \(self.cognitoIdentity ?? "nil"), clientContext: \(self.clientContext ?? "nil"), deadline: \(self.deadline))" } diff --git a/Sources/AWSLambdaRuntimeCore/LambdaHandlers.swift b/Sources/AWSLambdaRuntimeCore/LambdaHandlers.swift index 9637f0ea..e112e29a 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaHandlers.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaHandlers.swift @@ -20,7 +20,7 @@ import NIOCore /// Background work can also be executed after returning the response. After closing the response stream by calling /// ``LambdaResponseStreamWriter/finish()`` or ``LambdaResponseStreamWriter/writeAndFinish(_:)``, /// the ``handle(_:responseWriter:context:)`` function is free to execute any background work. -package protocol StreamingLambdaHandler { +public protocol StreamingLambdaHandler { /// The handler function -- implement the business logic of the Lambda function here. /// - Parameters: /// - event: The invocation's input data. @@ -45,7 +45,7 @@ package protocol StreamingLambdaHandler { /// A writer object to write the Lambda response stream into. The HTTP response is started lazily. /// before the first call to ``write(_:)`` or ``writeAndFinish(_:)``. -package protocol LambdaResponseStreamWriter { +public protocol LambdaResponseStreamWriter { /// Write a response part into the stream. Bytes written are streamed continually. /// - Parameter buffer: The buffer to write. func write(_ buffer: ByteBuffer) async throws @@ -64,7 +64,7 @@ package protocol LambdaResponseStreamWriter { /// /// - note: This handler protocol does not support response streaming because the output has to be encoded prior to it being sent, e.g. it is not possible to encode a partial/incomplete JSON string. /// This protocol also does not support the execution of background work after the response has been returned -- the ``LambdaWithBackgroundProcessingHandler`` protocol caters for such use-cases. -package protocol LambdaHandler { +public protocol LambdaHandler { /// Generic input type. /// The body of the request sent to Lambda will be decoded into this type for the handler to consume. associatedtype Event: Decodable @@ -85,7 +85,7 @@ package protocol LambdaHandler { /// This is achieved by not having a return type in the `handle` function. The output is instead written into a /// ``LambdaResponseWriter``that is passed in as an argument, meaning that the ``handle(_:)`` function is then free to implement /// any background work after the result has been sent to the AWS Lambda control plane. -package protocol LambdaWithBackgroundProcessingHandler { +public protocol LambdaWithBackgroundProcessingHandler { /// Generic input type. /// The body of the request sent to Lambda will be decoded into this type for the handler to consume. associatedtype Event: Decodable @@ -109,7 +109,7 @@ package protocol LambdaWithBackgroundProcessingHandler { /// Used with ``LambdaWithBackgroundProcessingHandler``. /// A mechanism to "return" an output from ``LambdaWithBackgroundProcessingHandler/handle(_:outputWriter:context:)`` without the function needing to /// have a return type and exit at that point. This allows for background work to be executed _after_ a response has been sent to the AWS Lambda response endpoint. -package protocol LambdaResponseWriter { +public protocol LambdaResponseWriter { associatedtype Output /// Sends the generic ``Output`` object (representing the computed result of the handler) /// to the AWS Lambda response endpoint. @@ -120,12 +120,12 @@ package protocol LambdaResponseWriter { /// A ``StreamingLambdaHandler`` conforming handler object that can be constructed with a closure. /// Allows for a handler to be defined in a clean manner, leveraging Swift's trailing closure syntax. -package struct StreamingClosureHandler: StreamingLambdaHandler { +public struct StreamingClosureHandler: StreamingLambdaHandler { let body: @Sendable (ByteBuffer, LambdaResponseStreamWriter, LambdaContext) async throws -> Void /// Initialize an instance from a handler function in the form of a closure. /// - Parameter body: The handler function written as a closure. - package init( + public init( body: @Sendable @escaping (ByteBuffer, LambdaResponseStreamWriter, LambdaContext) async throws -> Void ) { self.body = body @@ -137,7 +137,7 @@ package struct StreamingClosureHandler: StreamingLambdaHandler { /// - responseWriter: A ``LambdaResponseStreamWriter`` to write the invocation's response to. /// If no response or error is written to `responseWriter` an error will be reported to the invoker. /// - context: The ``LambdaContext`` containing the invocation's metadata. - package func handle( + public func handle( _ request: ByteBuffer, responseWriter: some LambdaResponseStreamWriter, context: LambdaContext @@ -148,18 +148,18 @@ package struct StreamingClosureHandler: StreamingLambdaHandler { /// A ``LambdaHandler`` conforming handler object that can be constructed with a closure. /// Allows for a handler to be defined in a clean manner, leveraging Swift's trailing closure syntax. -package struct ClosureHandler: LambdaHandler { +public struct ClosureHandler: LambdaHandler { let body: (Event, LambdaContext) async throws -> Output /// Initialize with a closure handler over generic `Input` and `Output` types. /// - Parameter body: The handler function written as a closure. - package init(body: @escaping (Event, LambdaContext) async throws -> Output) where Output: Encodable { + public init(body: @escaping (Event, LambdaContext) async throws -> Output) where Output: Encodable { self.body = body } /// Initialize with a closure handler over a generic `Input` type, and a `Void` `Output`. /// - Parameter body: The handler function written as a closure. - package init(body: @escaping (Event, LambdaContext) async throws -> Void) where Output == Void { + public init(body: @escaping (Event, LambdaContext) async throws -> Void) where Output == Void { self.body = body } @@ -167,7 +167,7 @@ package struct ClosureHandler: LambdaHandler { /// - Parameters: /// - event: The generic ``Event`` object representing the invocation's input data. /// - context: The ``LambdaContext`` containing the invocation's metadata. - package func handle(_ event: Event, context: LambdaContext) async throws -> Output { + public func handle(_ event: Event, context: LambdaContext) async throws -> Output { try await self.body(event, context) } } @@ -175,7 +175,7 @@ package struct ClosureHandler: LambdaHandler { extension LambdaRuntime { /// Initialize an instance with a ``StreamingLambdaHandler`` in the form of a closure. /// - Parameter body: The handler in the form of a closure. - package convenience init( + public convenience init( body: @Sendable @escaping (ByteBuffer, LambdaResponseStreamWriter, LambdaContext) async throws -> Void ) where Handler == StreamingClosureHandler { self.init(handler: StreamingClosureHandler(body: body)) @@ -185,7 +185,7 @@ extension LambdaRuntime { /// - Parameter body: The handler in the form of a closure. /// - Parameter encoder: The encoder object that will be used to encode the generic ``Output`` into a ``ByteBuffer``. /// - Parameter decoder: The decoder object that will be used to decode the incoming ``ByteBuffer`` event into the generic ``Event`` type. - package convenience init< + public convenience init< Event: Decodable, Output: Encodable, Encoder: LambdaOutputEncoder, @@ -217,7 +217,7 @@ extension LambdaRuntime { /// - Parameter body: The handler in the form of a closure. /// - Parameter encoder: The encoder object that will be used to encode the generic ``Output`` into a ``ByteBuffer``. /// - Parameter decoder: The decoder object that will be used to decode the incoming ``ByteBuffer`` event into the generic ``Event`` type. - package convenience init( + public convenience init( decoder: Decoder, body: @escaping (Event, LambdaContext) async throws -> Void ) diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift index c01215ac..f36c7ee3 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift @@ -20,13 +20,13 @@ import NIOConcurrencyHelpers // We need `@unchecked` Sendable here, as `NIOLockedValueBox` does not understand `sending` today. // We don't want to use `NIOLockedValueBox` here anyway. We would love to use Mutex here, but this // sadly crashes the compiler today. -package final class LambdaRuntime: @unchecked Sendable where Handler: StreamingLambdaHandler { +public final class LambdaRuntime: @unchecked Sendable where Handler: StreamingLambdaHandler { // TODO: We want to change this to Mutex as soon as this doesn't crash the Swift compiler on Linux anymore let handlerMutex: NIOLockedValueBox> let logger: Logger let eventLoop: EventLoop - package init( + public init( handler: sending Handler, eventLoop: EventLoop = Lambda.defaultEventLoop, logger: Logger = Logger(label: "LambdaRuntime") @@ -36,7 +36,7 @@ package final class LambdaRuntime: @unchecked Sendable where Handler: S self.logger = logger } - package func run() async throws { + public func run() async throws { guard let runtimeEndpoint = Lambda.env("AWS_LAMBDA_RUNTIME_API") else { throw LambdaRuntimeError(code: .missingLambdaRuntimeAPIEnvironmentVariable) } From dd77e81ad330ec7f4d119d3906f62663d9bd3838 Mon Sep 17 00:00:00 2001 From: aryan-25 Date: Fri, 6 Sep 2024 10:53:27 +0100 Subject: [PATCH 032/177] Depend on `NIOCore` and `NIOPosix` instead of `NIO` (#359) --- Package.swift | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Package.swift b/Package.swift index 4f0e0031..fe9533bd 100644 --- a/Package.swift +++ b/Package.swift @@ -82,7 +82,8 @@ let package = Package( name: "AWSLambdaTesting", dependencies: [ .byName(name: "AWSLambdaRuntime"), - .product(name: "NIO", package: "swift-nio"), + .product(name: "NIOCore", package: "swift-nio"), + .product(name: "NIOPosix", package: "swift-nio"), ] ), .testTarget( @@ -97,7 +98,8 @@ let package = Package( name: "MockServer", dependencies: [ .product(name: "NIOHTTP1", package: "swift-nio"), - .product(name: "NIO", package: "swift-nio"), + .product(name: "NIOCore", package: "swift-nio"), + .product(name: "NIOPosix", package: "swift-nio"), ], swiftSettings: [.swiftLanguageMode(.v5)] ), From 757815bc6bb73917fcba2b1051e6bd71e4cc1b66 Mon Sep 17 00:00:00 2001 From: Fabian Fett Date: Fri, 6 Sep 2024 12:30:50 +0200 Subject: [PATCH 033/177] Use Swift Testing in `LambdaRequestIDTests` (#360) --- .../LambdaRequestIDTests.swift | 170 ++++++++++-------- 1 file changed, 93 insertions(+), 77 deletions(-) diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaRequestIDTests.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaRequestIDTests.swift index e58520ac..9e406fdf 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/LambdaRequestIDTests.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/LambdaRequestIDTests.swift @@ -12,63 +12,70 @@ // //===----------------------------------------------------------------------===// +import Foundation import NIOCore -import XCTest +import Testing @testable import AWSLambdaRuntimeCore -final class LambdaRequestIDTest: XCTestCase { +@Suite("LambdaRequestID tests") +struct LambdaRequestIDTest { + @Test func testInitFromStringSuccess() { let string = "E621E1F8-C36C-495A-93FC-0C247A3E6E5F" var buffer = ByteBuffer(string: string) let requestID = buffer.readRequestID() - XCTAssertEqual(buffer.readerIndex, 36) - XCTAssertEqual(buffer.readableBytes, 0) - XCTAssertEqual(requestID?.uuidString, UUID(uuidString: string)?.uuidString) - XCTAssertEqual(requestID?.uppercased, string) + #expect(buffer.readerIndex == 36) + #expect(buffer.readableBytes == 0) + #expect(requestID?.uuidString == UUID(uuidString: string)?.uuidString) + #expect(requestID?.uppercased == string) } + @Test func testInitFromLowercaseStringSuccess() { let string = "E621E1F8-C36C-495A-93FC-0C247A3E6E5F".lowercased() var originalBuffer = ByteBuffer(string: string) let requestID = originalBuffer.readRequestID() - XCTAssertEqual(originalBuffer.readerIndex, 36) - XCTAssertEqual(originalBuffer.readableBytes, 0) - XCTAssertEqual(requestID?.uuidString, UUID(uuidString: string)?.uuidString) - XCTAssertEqual(requestID?.lowercased, string) + #expect(originalBuffer.readerIndex == 36) + #expect(originalBuffer.readableBytes == 0) + #expect(requestID?.uuidString == UUID(uuidString: string)?.uuidString) + #expect(requestID?.lowercased == string) var newBuffer = ByteBuffer() originalBuffer.moveReaderIndex(to: 0) - XCTAssertNoThrow(try newBuffer.writeRequestID(XCTUnwrap(requestID))) - XCTAssertEqual(newBuffer, originalBuffer) + #expect(throws: Never.self) { try newBuffer.writeRequestID(#require(requestID)) } + #expect(newBuffer == originalBuffer) } + @Test func testInitFromStringMissingCharacterAtEnd() { let string = "E621E1F8-C36C-495A-93FC-0C247A3E6E5" var buffer = ByteBuffer(string: string) let readableBeforeRead = buffer.readableBytes let requestID = buffer.readRequestID() - XCTAssertNil(requestID) - XCTAssertEqual(buffer.readerIndex, 0) - XCTAssertEqual(buffer.readableBytes, readableBeforeRead) + #expect(requestID == nil) + #expect(buffer.readerIndex == 0) + #expect(buffer.readableBytes == readableBeforeRead) } + @Test func testInitFromStringInvalidCharacterAtEnd() { let string = "E621E1F8-C36C-495A-93FC-0C247A3E6E5H" var buffer = ByteBuffer(string: string) let readableBeforeRead = buffer.readableBytes let requestID = buffer.readRequestID() - XCTAssertNil(requestID) - XCTAssertEqual(buffer.readerIndex, 0) - XCTAssertEqual(buffer.readableBytes, readableBeforeRead) + #expect(requestID == nil) + #expect(buffer.readerIndex == 0) + #expect(buffer.readableBytes == readableBeforeRead) } - func testInitFromStringInvalidSeparatorCharacter() { - let invalid = [ + @Test( + "Init from String with invalid separator character", + arguments: [ // with _ instead of - "E621E1F8-C36C-495A-93FC_0C247A3E6E5F", "E621E1F8-C36C-495A_93FC-0C247A3E6E5F", @@ -81,18 +88,19 @@ final class LambdaRequestIDTest: XCTestCase { "E621E1F8-C36C0495A-93FC-0C247A3E6E5F", "E621E1F80C36C-495A-93FC-0C247A3E6E5F", ] + ) + func testInitFromStringInvalidSeparatorCharacter(_ input: String) { - for string in invalid { - var buffer = ByteBuffer(string: string) + var buffer = ByteBuffer(string: input) - let readableBeforeRead = buffer.readableBytes - let requestID = buffer.readRequestID() - XCTAssertNil(requestID) - XCTAssertEqual(buffer.readerIndex, 0) - XCTAssertEqual(buffer.readableBytes, readableBeforeRead) - } + let readableBeforeRead = buffer.readableBytes + let requestID = buffer.readRequestID() + #expect(requestID == nil) + #expect(buffer.readerIndex == 0) + #expect(buffer.readableBytes == readableBeforeRead) } + @Test func testInitFromNSStringSuccess() { let nsString = NSMutableString(capacity: 16) nsString.append("E621E1F8") @@ -110,79 +118,85 @@ final class LambdaRequestIDTest: XCTestCase { // achieve this though at the moment // XCTAssertFalse((nsString as String).isContiguousUTF8) let requestID = LambdaRequestID(uuidString: nsString as String) - XCTAssertEqual(requestID?.uuidString, LambdaRequestID(uuidString: nsString as String)?.uuidString) - XCTAssertEqual(requestID?.uppercased, nsString as String) + #expect(requestID?.uuidString == LambdaRequestID(uuidString: nsString as String)?.uuidString) + #expect(requestID?.uppercased == nsString as String) } + @Test func testUnparse() { let string = "E621E1F8-C36C-495A-93FC-0C247A3E6E5F" let requestID = LambdaRequestID(uuidString: string) - XCTAssertEqual(string.lowercased(), requestID?.lowercased) + #expect(string.lowercased() == requestID?.lowercased) } + @Test func testDescription() { let requestID = LambdaRequestID() let fduuid = UUID(uuid: requestID.uuid) - XCTAssertEqual(fduuid.description, requestID.description) - XCTAssertEqual(fduuid.debugDescription, requestID.debugDescription) + #expect(fduuid.description == requestID.description) + #expect(fduuid.debugDescription == requestID.debugDescription) } + @Test func testFoundationInteropFromFoundation() { let fduuid = UUID() let requestID = LambdaRequestID(uuid: fduuid.uuid) - XCTAssertEqual(fduuid.uuid.0, requestID.uuid.0) - XCTAssertEqual(fduuid.uuid.1, requestID.uuid.1) - XCTAssertEqual(fduuid.uuid.2, requestID.uuid.2) - XCTAssertEqual(fduuid.uuid.3, requestID.uuid.3) - XCTAssertEqual(fduuid.uuid.4, requestID.uuid.4) - XCTAssertEqual(fduuid.uuid.5, requestID.uuid.5) - XCTAssertEqual(fduuid.uuid.6, requestID.uuid.6) - XCTAssertEqual(fduuid.uuid.7, requestID.uuid.7) - XCTAssertEqual(fduuid.uuid.8, requestID.uuid.8) - XCTAssertEqual(fduuid.uuid.9, requestID.uuid.9) - XCTAssertEqual(fduuid.uuid.10, requestID.uuid.10) - XCTAssertEqual(fduuid.uuid.11, requestID.uuid.11) - XCTAssertEqual(fduuid.uuid.12, requestID.uuid.12) - XCTAssertEqual(fduuid.uuid.13, requestID.uuid.13) - XCTAssertEqual(fduuid.uuid.14, requestID.uuid.14) - XCTAssertEqual(fduuid.uuid.15, requestID.uuid.15) + #expect(fduuid.uuid.0 == requestID.uuid.0) + #expect(fduuid.uuid.1 == requestID.uuid.1) + #expect(fduuid.uuid.2 == requestID.uuid.2) + #expect(fduuid.uuid.3 == requestID.uuid.3) + #expect(fduuid.uuid.4 == requestID.uuid.4) + #expect(fduuid.uuid.5 == requestID.uuid.5) + #expect(fduuid.uuid.6 == requestID.uuid.6) + #expect(fduuid.uuid.7 == requestID.uuid.7) + #expect(fduuid.uuid.8 == requestID.uuid.8) + #expect(fduuid.uuid.9 == requestID.uuid.9) + #expect(fduuid.uuid.10 == requestID.uuid.10) + #expect(fduuid.uuid.11 == requestID.uuid.11) + #expect(fduuid.uuid.12 == requestID.uuid.12) + #expect(fduuid.uuid.13 == requestID.uuid.13) + #expect(fduuid.uuid.14 == requestID.uuid.14) + #expect(fduuid.uuid.15 == requestID.uuid.15) } + @Test func testFoundationInteropToFoundation() { let requestID = LambdaRequestID() let fduuid = UUID(uuid: requestID.uuid) - XCTAssertEqual(fduuid.uuid.0, requestID.uuid.0) - XCTAssertEqual(fduuid.uuid.1, requestID.uuid.1) - XCTAssertEqual(fduuid.uuid.2, requestID.uuid.2) - XCTAssertEqual(fduuid.uuid.3, requestID.uuid.3) - XCTAssertEqual(fduuid.uuid.4, requestID.uuid.4) - XCTAssertEqual(fduuid.uuid.5, requestID.uuid.5) - XCTAssertEqual(fduuid.uuid.6, requestID.uuid.6) - XCTAssertEqual(fduuid.uuid.7, requestID.uuid.7) - XCTAssertEqual(fduuid.uuid.8, requestID.uuid.8) - XCTAssertEqual(fduuid.uuid.9, requestID.uuid.9) - XCTAssertEqual(fduuid.uuid.10, requestID.uuid.10) - XCTAssertEqual(fduuid.uuid.11, requestID.uuid.11) - XCTAssertEqual(fduuid.uuid.12, requestID.uuid.12) - XCTAssertEqual(fduuid.uuid.13, requestID.uuid.13) - XCTAssertEqual(fduuid.uuid.14, requestID.uuid.14) - XCTAssertEqual(fduuid.uuid.15, requestID.uuid.15) + #expect(fduuid.uuid.0 == requestID.uuid.0) + #expect(fduuid.uuid.1 == requestID.uuid.1) + #expect(fduuid.uuid.2 == requestID.uuid.2) + #expect(fduuid.uuid.3 == requestID.uuid.3) + #expect(fduuid.uuid.4 == requestID.uuid.4) + #expect(fduuid.uuid.5 == requestID.uuid.5) + #expect(fduuid.uuid.6 == requestID.uuid.6) + #expect(fduuid.uuid.7 == requestID.uuid.7) + #expect(fduuid.uuid.8 == requestID.uuid.8) + #expect(fduuid.uuid.9 == requestID.uuid.9) + #expect(fduuid.uuid.10 == requestID.uuid.10) + #expect(fduuid.uuid.11 == requestID.uuid.11) + #expect(fduuid.uuid.12 == requestID.uuid.12) + #expect(fduuid.uuid.13 == requestID.uuid.13) + #expect(fduuid.uuid.14 == requestID.uuid.14) + #expect(fduuid.uuid.15 == requestID.uuid.15) } + @Test func testHashing() { let requestID = LambdaRequestID() let fduuid = UUID(uuid: requestID.uuid) - XCTAssertEqual(fduuid.hashValue, requestID.hashValue) + #expect(fduuid.hashValue == requestID.hashValue) var _uuid = requestID.uuid _uuid.0 = _uuid.0 > 0 ? _uuid.0 - 1 : 1 - XCTAssertNotEqual(UUID(uuid: _uuid).hashValue, requestID.hashValue) + #expect(UUID(uuid: _uuid).hashValue != requestID.hashValue) } - func testEncoding() { + @Test + func testEncoding() throws { struct Test: Codable { let requestID: LambdaRequestID } @@ -190,13 +204,13 @@ final class LambdaRequestIDTest: XCTestCase { let test = Test(requestID: requestID) var data: Data? - XCTAssertNoThrow(data = try JSONEncoder().encode(test)) - XCTAssertEqual( - try String(decoding: XCTUnwrap(data), as: Unicode.UTF8.self), - #"{"requestID":"\#(requestID.uuidString)"}"# + #expect(throws: Never.self) { data = try JSONEncoder().encode(test) } + #expect( + try String(decoding: #require(data), as: Unicode.UTF8.self) == #"{"requestID":"\#(requestID.uuidString)"}"# ) } + @Test func testDecodingSuccess() { struct Test: Codable { let requestID: LambdaRequestID @@ -205,10 +219,11 @@ final class LambdaRequestIDTest: XCTestCase { let data = #"{"requestID":"\#(requestID.uuidString)"}"#.data(using: .utf8) var result: Test? - XCTAssertNoThrow(result = try JSONDecoder().decode(Test.self, from: XCTUnwrap(data))) - XCTAssertEqual(result?.requestID, requestID) + #expect(throws: Never.self) { result = try JSONDecoder().decode(Test.self, from: #require(data)) } + #expect(result?.requestID == requestID) } + @Test func testDecodingFailure() { struct Test: Codable { let requestID: LambdaRequestID @@ -218,12 +233,13 @@ final class LambdaRequestIDTest: XCTestCase { _ = requestIDString.removeLast() let data = #"{"requestID":"\#(requestIDString)"}"#.data(using: .utf8) - XCTAssertThrowsError(try JSONDecoder().decode(Test.self, from: XCTUnwrap(data))) { error in - XCTAssertNotNil(error as? DecodingError) + #expect(throws: DecodingError.self) { + try JSONDecoder().decode(Test.self, from: #require(data)) } } + @Test func testStructSize() { - XCTAssertEqual(MemoryLayout.size, 16) + #expect(MemoryLayout.size == 16) } } From 0dcb143557c26ea8514155c061f77b941523d599 Mon Sep 17 00:00:00 2001 From: Fabian Fett Date: Fri, 6 Sep 2024 12:38:54 +0200 Subject: [PATCH 034/177] Use Swift Testing for InvocationTests (#362) --- ...questTests.swift => InvocationTests.swift} | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) rename Tests/AWSLambdaRuntimeCoreTests/{ControlPlaneRequestTests.swift => InvocationTests.swift} (73%) diff --git a/Tests/AWSLambdaRuntimeCoreTests/ControlPlaneRequestTests.swift b/Tests/AWSLambdaRuntimeCoreTests/InvocationTests.swift similarity index 73% rename from Tests/AWSLambdaRuntimeCoreTests/ControlPlaneRequestTests.swift rename to Tests/AWSLambdaRuntimeCoreTests/InvocationTests.swift index 013cf9d8..86bfaae9 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/ControlPlaneRequestTests.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/InvocationTests.swift @@ -12,12 +12,15 @@ // //===----------------------------------------------------------------------===// +import Foundation import NIOHTTP1 -import XCTest +import Testing @testable import AWSLambdaRuntimeCore -class InvocationTest: XCTestCase { +@Suite +struct InvocationTest { + @Test func testInvocationTraceID() throws { let headers = HTTPHeaders([ (AmazonHeaders.requestID, "test"), @@ -25,14 +28,10 @@ class InvocationTest: XCTestCase { (AmazonHeaders.invokedFunctionARN, "arn:aws:lambda:us-east-1:123456789012:function:custom-runtime"), ]) - var invocation: InvocationMetadata? + var maybeInvocation: InvocationMetadata? - XCTAssertNoThrow(invocation = try InvocationMetadata(headers: headers)) - XCTAssertNotNil(invocation) - - guard !invocation!.traceID.isEmpty else { - XCTFail("Invocation traceID is empty") - return - } + #expect(throws: Never.self) { maybeInvocation = try InvocationMetadata(headers: headers) } + let invocation = try #require(maybeInvocation) + #expect(!invocation.traceID.isEmpty) } } From 0af509b24399d7887327dd7dd72290ba25e068df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Fri, 6 Sep 2024 14:54:42 +0200 Subject: [PATCH 035/177] Fix deprecation warning for Plugin's Path (#363) --- Plugins/AWSLambdaPackager/Plugin.swift | 220 ++++++-------------- Plugins/AWSLambdaPackager/PluginUtils.swift | 156 ++++++++++++++ 2 files changed, 221 insertions(+), 155 deletions(-) create mode 100644 Plugins/AWSLambdaPackager/PluginUtils.swift diff --git a/Plugins/AWSLambdaPackager/Plugin.swift b/Plugins/AWSLambdaPackager/Plugin.swift index a0ea999b..2e091c74 100644 --- a/Plugins/AWSLambdaPackager/Plugin.swift +++ b/Plugins/AWSLambdaPackager/Plugin.swift @@ -12,13 +12,11 @@ // //===----------------------------------------------------------------------===// -import Dispatch -import Foundation import PackagePlugin -import Synchronization +import Foundation -@available(macOS 15.0, *) @main +@available(macOS 15.0, *) struct AWSLambdaPackager: CommandPlugin { func performCommand(context: PackagePlugin.PluginContext, arguments: [String]) async throws { let configuration = try Configuration(context: context, arguments: arguments) @@ -33,7 +31,7 @@ struct AWSLambdaPackager: CommandPlugin { ) } - let builtProducts: [LambdaProduct: Path] + let builtProducts: [LambdaProduct: URL] if self.isAmazonLinux2() { // build directly on the machine builtProducts = try self.build( @@ -46,9 +44,9 @@ struct AWSLambdaPackager: CommandPlugin { // build with docker builtProducts = try self.buildInDocker( packageIdentity: context.package.id, - packageDirectory: context.package.directory, + packageDirectory: context.package.directoryURL, products: configuration.products, - toolsProvider: { name in try context.tool(named: name).path }, + toolsProvider: { name in try context.tool(named: name).url }, outputDirectory: configuration.outputDirectory, baseImage: configuration.baseDockerImage, disableDockerImageUpdate: configuration.disableDockerImageUpdate, @@ -61,7 +59,7 @@ struct AWSLambdaPackager: CommandPlugin { let archives = try self.package( packageName: context.package.displayName, products: builtProducts, - toolsProvider: { name in try context.tool(named: name).path }, + toolsProvider: { name in try context.tool(named: name).url }, outputDirectory: configuration.outputDirectory, verboseLogging: configuration.verboseLogging ) @@ -70,21 +68,21 @@ struct AWSLambdaPackager: CommandPlugin { "\(archives.count > 0 ? archives.count.description : "no") archive\(archives.count != 1 ? "s" : "") created" ) for (product, archivePath) in archives { - print(" * \(product.name) at \(archivePath.string)") + print(" * \(product.name) at \(archivePath)") } } private func buildInDocker( packageIdentity: Package.ID, - packageDirectory: Path, + packageDirectory: URL, products: [Product], - toolsProvider: (String) throws -> Path, - outputDirectory: Path, + toolsProvider: (String) throws -> URL, + outputDirectory: URL, baseImage: String, disableDockerImageUpdate: Bool, buildConfiguration: PackageManager.BuildConfiguration, verboseLogging: Bool - ) throws -> [LambdaProduct: Path] { + ) throws -> [LambdaProduct: URL] { let dockerToolPath = try toolsProvider("docker") print("-------------------------------------------------------------------------") @@ -94,7 +92,7 @@ struct AWSLambdaPackager: CommandPlugin { if !disableDockerImageUpdate { // update the underlying docker image, if necessary print("updating \"\(baseImage)\" docker image") - try self.execute( + try Utils.execute( executable: dockerToolPath, arguments: ["pull", baseImage], logLevel: .output @@ -103,10 +101,10 @@ struct AWSLambdaPackager: CommandPlugin { // get the build output path let buildOutputPathCommand = "swift build -c \(buildConfiguration.rawValue) --show-bin-path" - let dockerBuildOutputPath = try self.execute( + let dockerBuildOutputPath = try Utils.execute( executable: dockerToolPath, arguments: [ - "run", "--rm", "-v", "\(packageDirectory.string):/workspace", "-w", "/workspace", baseImage, "bash", + "run", "--rm", "-v", "\(packageDirectory.path()):/workspace", "-w", "/workspace", baseImage, "bash", "-cl", buildOutputPathCommand, ], logLevel: verboseLogging ? .debug : .silent @@ -114,12 +112,10 @@ struct AWSLambdaPackager: CommandPlugin { guard let buildPathOutput = dockerBuildOutputPath.split(separator: "\n").last else { throw Errors.failedParsingDockerOutput(dockerBuildOutputPath) } - let buildOutputPath = Path( - buildPathOutput.replacingOccurrences(of: "/workspace", with: packageDirectory.string) - ) + let buildOutputPath = URL(string: buildPathOutput.replacingOccurrences(of: "/workspace/", with: packageDirectory.description))! // build the products - var builtProducts = [LambdaProduct: Path]() + var builtProducts = [LambdaProduct: URL]() for product in products { print("building \"\(product.name)\"") let buildCommand = @@ -128,30 +124,32 @@ struct AWSLambdaPackager: CommandPlugin { // when developing locally, we must have the full swift-aws-lambda-runtime project in the container // because Examples' Package.swift have a dependency on ../.. // just like Package.swift's examples assume ../.., we assume we are two levels below the root project - let lastComponent = packageDirectory.lastComponent - let beforeLastComponent = packageDirectory.removingLastComponent().lastComponent - try self.execute( + let slice = packageDirectory.pathComponents.suffix(2) + let beforeLastComponent = packageDirectory.pathComponents[slice.startIndex] + let lastComponent = packageDirectory.pathComponents[slice.endIndex-1] + try Utils.execute( executable: dockerToolPath, arguments: [ "run", "--rm", "--env", "LAMBDA_USE_LOCAL_DEPS=true", "-v", - "\(packageDirectory.string)/../..:/workspace", "-w", + "\(packageDirectory.path())../..:/workspace", "-w", "/workspace/\(beforeLastComponent)/\(lastComponent)", baseImage, "bash", "-cl", buildCommand, ], logLevel: verboseLogging ? .debug : .output ) } else { - try self.execute( + try Utils.execute( executable: dockerToolPath, arguments: [ - "run", "--rm", "-v", "\(packageDirectory.string):/workspace", "-w", "/workspace", baseImage, + "run", "--rm", "-v", "\(packageDirectory.path()):/workspace", "-w", "/workspace", baseImage, "bash", "-cl", buildCommand, ], logLevel: verboseLogging ? .debug : .output ) } - let productPath = buildOutputPath.appending(product.name) - guard FileManager.default.fileExists(atPath: productPath.string) else { - Diagnostics.error("expected '\(product.name)' binary at \"\(productPath.string)\"") + let productPath = buildOutputPath.appending(path: product.name) + + guard FileManager.default.fileExists(atPath: productPath.path()) else { + Diagnostics.error("expected '\(product.name)' binary at \"\(productPath.path())\"") throw Errors.productExecutableNotFound(product.name) } builtProducts[.init(product)] = productPath @@ -164,12 +162,12 @@ struct AWSLambdaPackager: CommandPlugin { products: [Product], buildConfiguration: PackageManager.BuildConfiguration, verboseLogging: Bool - ) throws -> [LambdaProduct: Path] { + ) throws -> [LambdaProduct: URL] { print("-------------------------------------------------------------------------") print("building \"\(packageIdentity)\"") print("-------------------------------------------------------------------------") - var results = [LambdaProduct: Path]() + var results = [LambdaProduct: URL]() for product in products { print("building \"\(product.name)\"") var parameters = PackageManager.BuildParameters() @@ -184,7 +182,7 @@ struct AWSLambdaPackager: CommandPlugin { guard let artifact = result.executableArtifact(for: product) else { throw Errors.productExecutableNotFound(product.name) } - results[.init(product)] = artifact.path + results[.init(product)] = artifact.url } return results } @@ -192,34 +190,34 @@ struct AWSLambdaPackager: CommandPlugin { // TODO: explore using ziplib or similar instead of shelling out private func package( packageName: String, - products: [LambdaProduct: Path], - toolsProvider: (String) throws -> Path, - outputDirectory: Path, + products: [LambdaProduct: URL], + toolsProvider: (String) throws -> URL, + outputDirectory: URL, verboseLogging: Bool - ) throws -> [LambdaProduct: Path] { + ) throws -> [LambdaProduct: URL] { let zipToolPath = try toolsProvider("zip") - var archives = [LambdaProduct: Path]() + var archives = [LambdaProduct: URL]() for (product, artifactPath) in products { print("-------------------------------------------------------------------------") print("archiving \"\(product.name)\"") print("-------------------------------------------------------------------------") // prep zipfile location - let workingDirectory = outputDirectory.appending(product.name) - let zipfilePath = workingDirectory.appending("\(product.name).zip") - if FileManager.default.fileExists(atPath: workingDirectory.string) { - try FileManager.default.removeItem(atPath: workingDirectory.string) + let workingDirectory = outputDirectory.appending(path: product.name) + let zipfilePath = workingDirectory.appending(path: "\(product.name).zip") + if FileManager.default.fileExists(atPath: workingDirectory.path()) { + try FileManager.default.removeItem(atPath: workingDirectory.path()) } - try FileManager.default.createDirectory(atPath: workingDirectory.string, withIntermediateDirectories: true) + try FileManager.default.createDirectory(atPath: workingDirectory.path(), withIntermediateDirectories: true) // rename artifact to "bootstrap" - let relocatedArtifactPath = workingDirectory.appending(artifactPath.lastComponent) - let symbolicLinkPath = workingDirectory.appending("bootstrap") - try FileManager.default.copyItem(atPath: artifactPath.string, toPath: relocatedArtifactPath.string) + let relocatedArtifactPath = workingDirectory.appending(path: artifactPath.lastPathComponent) + let symbolicLinkPath = workingDirectory.appending(path: "bootstrap") + try FileManager.default.copyItem(atPath: artifactPath.path(), toPath: relocatedArtifactPath.path()) try FileManager.default.createSymbolicLink( - atPath: symbolicLinkPath.string, - withDestinationPath: relocatedArtifactPath.lastComponent + atPath: symbolicLinkPath.path(), + withDestinationPath: relocatedArtifactPath.lastPathComponent ) var arguments: [String] = [] @@ -227,29 +225,31 @@ struct AWSLambdaPackager: CommandPlugin { arguments = [ "--recurse-paths", "--symlinks", - zipfilePath.lastComponent, - relocatedArtifactPath.lastComponent, - symbolicLinkPath.lastComponent, + zipfilePath.lastPathComponent, + relocatedArtifactPath.lastPathComponent, + symbolicLinkPath.lastPathComponent, ] #else throw Errors.unsupportedPlatform("can't or don't know how to create a zip file on this platform") #endif // add resources - let artifactDirectory = artifactPath.removingLastComponent() + var artifactPathComponents = artifactPath.pathComponents + _ = artifactPathComponents.removeLast() + let artifactDirectory = artifactPathComponents.joined(separator: "/") let resourcesDirectoryName = "\(packageName)_\(product.name).resources" let resourcesDirectory = artifactDirectory.appending(resourcesDirectoryName) - let relocatedResourcesDirectory = workingDirectory.appending(resourcesDirectoryName) - if FileManager.default.fileExists(atPath: resourcesDirectory.string) { + let relocatedResourcesDirectory = workingDirectory.appending(path: resourcesDirectoryName) + if FileManager.default.fileExists(atPath: resourcesDirectory) { try FileManager.default.copyItem( - atPath: resourcesDirectory.string, - toPath: relocatedResourcesDirectory.string + atPath: resourcesDirectory, + toPath: relocatedResourcesDirectory.path() ) arguments.append(resourcesDirectoryName) } // run the zip tool - try self.execute( + try Utils.execute( executable: zipToolPath, arguments: arguments, customWorkingDirectory: workingDirectory, @@ -261,100 +261,6 @@ struct AWSLambdaPackager: CommandPlugin { return archives } - @discardableResult - private func execute( - executable: Path, - arguments: [String], - customWorkingDirectory: Path? = .none, - logLevel: ProcessLogLevel - ) throws -> String { - if logLevel >= .debug { - print("\(executable.string) \(arguments.joined(separator: " "))") - } - - let fd = dup(1) - let stdout = fdopen(fd, "rw")! - defer { fclose(stdout) } - - // We need to use an unsafe transfer here to get the fd into our Sendable closure. - // This transfer is fine, because we guarantee that the code in the outputHandler - // is run before we continue the functions execution, where the fd is used again. - // See `process.waitUntilExit()` and the following `outputSync.wait()` - struct UnsafeTransfer: @unchecked Sendable { - let value: Value - } - - let outputMutex = Mutex("") - let outputSync = DispatchGroup() - let outputQueue = DispatchQueue(label: "AWSLambdaPackager.output") - let unsafeTransfer = UnsafeTransfer(value: stdout) - let outputHandler = { @Sendable (data: Data?) in - dispatchPrecondition(condition: .onQueue(outputQueue)) - - outputSync.enter() - defer { outputSync.leave() } - - guard - let _output = data.flatMap({ - String(data: $0, encoding: .utf8)?.trimmingCharacters(in: CharacterSet(["\n"])) - }), !_output.isEmpty - else { - return - } - - outputMutex.withLock { output in - output += _output + "\n" - } - - switch logLevel { - case .silent: - break - case .debug(let outputIndent), .output(let outputIndent): - print(String(repeating: " ", count: outputIndent), terminator: "") - print(_output) - fflush(unsafeTransfer.value) - } - } - - let pipe = Pipe() - pipe.fileHandleForReading.readabilityHandler = { fileHandle in - outputQueue.async { outputHandler(fileHandle.availableData) } - } - - let process = Process() - process.standardOutput = pipe - process.standardError = pipe - process.executableURL = URL(fileURLWithPath: executable.string) - process.arguments = arguments - if let workingDirectory = customWorkingDirectory { - process.currentDirectoryURL = URL(fileURLWithPath: workingDirectory.string) - } - process.terminationHandler = { _ in - outputQueue.async { - outputHandler(try? pipe.fileHandleForReading.readToEnd()) - } - } - - try process.run() - process.waitUntilExit() - - // wait for output to be full processed - outputSync.wait() - - let output = outputMutex.withLock { $0 } - - if process.terminationStatus != 0 { - // print output on failure and if not already printed - if logLevel < .output { - print(output) - fflush(stdout) - } - throw Errors.processFailed([executable.string] + arguments, process.terminationStatus) - } - - return output - } - private func isAmazonLinux2() -> Bool { if let data = FileManager.default.contents(atPath: "/etc/system-release"), let release = String(data: data, encoding: .utf8) @@ -368,7 +274,7 @@ struct AWSLambdaPackager: CommandPlugin { @available(macOS 15.0, *) private struct Configuration: CustomStringConvertible { - public let outputDirectory: Path + public let outputDirectory: URL public let products: [Product] public let explicitProducts: Bool public let buildConfiguration: PackageManager.BuildConfiguration @@ -392,14 +298,18 @@ private struct Configuration: CustomStringConvertible { self.verboseLogging = verboseArgument if let outputPath = outputPathArgument.first { + #if os(Linux) + var isDirectory: Bool = false + #else var isDirectory: ObjCBool = false - guard FileManager.default.fileExists(atPath: outputPath, isDirectory: &isDirectory), isDirectory.boolValue + #endif + guard FileManager.default.fileExists(atPath: outputPath, isDirectory: &isDirectory) else { throw Errors.invalidArgument("invalid output directory '\(outputPath)'") } - self.outputDirectory = Path(outputPath) + self.outputDirectory = URL(string: outputPath)! } else { - self.outputDirectory = context.pluginWorkDirectory.appending(subpath: "\(AWSLambdaPackager.self)") + self.outputDirectory = context.pluginWorkDirectoryURL.appending(path: "\(AWSLambdaPackager.self)") } self.explicitProducts = !productsArgument.isEmpty @@ -537,7 +447,7 @@ private struct LambdaProduct: Hashable { extension PackageManager.BuildResult { // find the executable produced by the build func executableArtifact(for product: Product) -> PackageManager.BuildResult.BuiltArtifact? { - let executables = self.builtArtifacts.filter { $0.kind == .executable && $0.path.lastComponent == product.name } + let executables = self.builtArtifacts.filter { $0.kind == .executable && $0.url.lastPathComponent == product.name } guard !executables.isEmpty else { return nil } diff --git a/Plugins/AWSLambdaPackager/PluginUtils.swift b/Plugins/AWSLambdaPackager/PluginUtils.swift new file mode 100644 index 00000000..6f60f7c4 --- /dev/null +++ b/Plugins/AWSLambdaPackager/PluginUtils.swift @@ -0,0 +1,156 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2022 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import Dispatch +import PackagePlugin +import Synchronization +import Foundation + +@available(macOS 15.0, *) +struct Utils { + @discardableResult + static func execute( + executable: URL, + arguments: [String], + customWorkingDirectory: URL? = .none, + logLevel: ProcessLogLevel + ) throws -> String { + if logLevel >= .debug { + print("\(executable.absoluteString) \(arguments.joined(separator: " "))") + } + + let fd = dup(1) + let stdout = fdopen(fd, "rw") + defer { fclose(stdout) } + + // We need to use an unsafe transfer here to get the fd into our Sendable closure. + // This transfer is fine, because we write to the variable from a single SerialDispatchQueue here. + // We wait until the process is run below process.waitUntilExit(). + // This means no further writes to output will happen. + // This makes it save for us to read the output + struct UnsafeTransfer: @unchecked Sendable { + let value: Value + } + + let outputMutex = Mutex("") + let outputSync = DispatchGroup() + let outputQueue = DispatchQueue(label: "AWSLambdaPackager.output") + let unsafeTransfer = UnsafeTransfer(value: stdout) + let outputHandler = { @Sendable (data: Data?) in + dispatchPrecondition(condition: .onQueue(outputQueue)) + + outputSync.enter() + defer { outputSync.leave() } + + guard + let _output = data.flatMap({ + String(data: $0, encoding: .utf8)?.trimmingCharacters(in: CharacterSet(["\n"])) + }), !_output.isEmpty + else { + return + } + + outputMutex.withLock { output in + output += _output + "\n" + } + + switch logLevel { + case .silent: + break + case .debug(let outputIndent), .output(let outputIndent): + print(String(repeating: " ", count: outputIndent), terminator: "") + print(_output) + fflush(unsafeTransfer.value) + } + } + + let pipe = Pipe() + pipe.fileHandleForReading.readabilityHandler = { fileHandle in + outputQueue.async { outputHandler(fileHandle.availableData) } + } + + let process = Process() + process.standardOutput = pipe + process.standardError = pipe + process.executableURL = URL(fileURLWithPath: executable.description) + process.arguments = arguments + if let workingDirectory = customWorkingDirectory { + process.currentDirectoryURL = URL(fileURLWithPath: workingDirectory.path()) + } + process.terminationHandler = { _ in + outputQueue.async { + outputHandler(try? pipe.fileHandleForReading.readToEnd()) + } + } + + try process.run() + process.waitUntilExit() + + // wait for output to be full processed + outputSync.wait() + + let output = outputMutex.withLock { $0 } + + if process.terminationStatus != 0 { + // print output on failure and if not already printed + if logLevel < .output { + print(output) + fflush(stdout) + } + throw ProcessError.processFailed([executable.path()] + arguments, process.terminationStatus) + } + + return output + } + + enum ProcessError: Error, CustomStringConvertible { + case processFailed([String], Int32) + + var description: String { + switch self { + case .processFailed(let arguments, let code): + return "\(arguments.joined(separator: " ")) failed with code \(code)" + } + } + } + + enum ProcessLogLevel: Comparable { + case silent + case output(outputIndent: Int) + case debug(outputIndent: Int) + + var naturalOrder: Int { + switch self { + case .silent: + return 0 + case .output: + return 1 + case .debug: + return 2 + } + } + + static var output: Self { + .output(outputIndent: 2) + } + + static var debug: Self { + .debug(outputIndent: 2) + } + + static func < (lhs: ProcessLogLevel, rhs: ProcessLogLevel) -> Bool { + lhs.naturalOrder < rhs.naturalOrder + } + } +} From 62274444b529bf80898aa2de970f316a32387ba6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Mon, 30 Sep 2024 08:31:46 -0400 Subject: [PATCH 036/177] add help option on archiver plugin (#368) --- Plugins/AWSLambdaPackager/Plugin.swift | 62 +++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 5 deletions(-) diff --git a/Plugins/AWSLambdaPackager/Plugin.swift b/Plugins/AWSLambdaPackager/Plugin.swift index 2e091c74..6bd0fcd0 100644 --- a/Plugins/AWSLambdaPackager/Plugin.swift +++ b/Plugins/AWSLambdaPackager/Plugin.swift @@ -12,14 +12,20 @@ // //===----------------------------------------------------------------------===// -import PackagePlugin import Foundation +import PackagePlugin @main @available(macOS 15.0, *) struct AWSLambdaPackager: CommandPlugin { func performCommand(context: PackagePlugin.PluginContext, arguments: [String]) async throws { let configuration = try Configuration(context: context, arguments: arguments) + + if configuration.help { + self.displayHelpMessage() + return + } + guard !configuration.products.isEmpty else { throw Errors.unknownProduct("no appropriate products found to package") } @@ -112,7 +118,9 @@ struct AWSLambdaPackager: CommandPlugin { guard let buildPathOutput = dockerBuildOutputPath.split(separator: "\n").last else { throw Errors.failedParsingDockerOutput(dockerBuildOutputPath) } - let buildOutputPath = URL(string: buildPathOutput.replacingOccurrences(of: "/workspace/", with: packageDirectory.description))! + let buildOutputPath = URL( + string: buildPathOutput.replacingOccurrences(of: "/workspace/", with: packageDirectory.description) + )! // build the products var builtProducts = [LambdaProduct: URL]() @@ -126,7 +134,7 @@ struct AWSLambdaPackager: CommandPlugin { // just like Package.swift's examples assume ../.., we assume we are two levels below the root project let slice = packageDirectory.pathComponents.suffix(2) let beforeLastComponent = packageDirectory.pathComponents[slice.startIndex] - let lastComponent = packageDirectory.pathComponents[slice.endIndex-1] + let lastComponent = packageDirectory.pathComponents[slice.endIndex - 1] try Utils.execute( executable: dockerToolPath, arguments: [ @@ -270,10 +278,47 @@ struct AWSLambdaPackager: CommandPlugin { return false } } + + private func displayHelpMessage() { + print( + """ + OVERVIEW: A SwiftPM plugin to build and package your lambda function. + + REQUIREMENTS: To use this plugin, you must have docker installed and started. + + USAGE: swift package --disable-sandbox archive [--help] [--verbose] + [--output-directory ] + [--products ] + [--configuration debug | release] + [--swift-version ] + [--base-docker-image ] + [--disable-docker-image-update] + + + OPTIONS: + --verbose Produce verbose output for debugging. + --output-directory The path of the binary package. + (default is `.build/plugins/AWSLambdaPackager/outputs/...`) + --products The list of executable targets to build. + (default is taken from Package.swift) + --configuration The build configuration (debug or release) + (default is release) + --swift-version The swift version to use for building. + (default is latest) + This parameter cannot be used when --base-docker-image is specified. + --base-docker-image The name of the base docker image to use for the build. + (default : swift-:amazonlinux2) + This parameter cannot be used when --swift-version is specified. + --disable-docker-image-update Do not attempt to update the docker image + --help Show help information. + """ + ) + } } @available(macOS 15.0, *) private struct Configuration: CustomStringConvertible { + public let help: Bool public let outputDirectory: URL public let products: [Product] public let explicitProducts: Bool @@ -294,7 +339,12 @@ private struct Configuration: CustomStringConvertible { let swiftVersionArgument = argumentExtractor.extractOption(named: "swift-version") let baseDockerImageArgument = argumentExtractor.extractOption(named: "base-docker-image") let disableDockerImageUpdateArgument = argumentExtractor.extractFlag(named: "disable-docker-image-update") > 0 + let helpArgument = argumentExtractor.extractFlag(named: "help") > 0 + // help required ? + self.help = helpArgument + + // verbose logging required ? self.verboseLogging = verboseArgument if let outputPath = outputPathArgument.first { @@ -302,7 +352,7 @@ private struct Configuration: CustomStringConvertible { var isDirectory: Bool = false #else var isDirectory: ObjCBool = false - #endif + #endif guard FileManager.default.fileExists(atPath: outputPath, isDirectory: &isDirectory) else { throw Errors.invalidArgument("invalid output directory '\(outputPath)'") @@ -447,7 +497,9 @@ private struct LambdaProduct: Hashable { extension PackageManager.BuildResult { // find the executable produced by the build func executableArtifact(for product: Product) -> PackageManager.BuildResult.BuiltArtifact? { - let executables = self.builtArtifacts.filter { $0.kind == .executable && $0.url.lastPathComponent == product.name } + let executables = self.builtArtifacts.filter { + $0.kind == .executable && $0.url.lastPathComponent == product.name + } guard !executables.isEmpty else { return nil } From 06936fefa4a402fd152b0230d0050920a14ca83f Mon Sep 17 00:00:00 2001 From: Fabian Fett Date: Mon, 30 Sep 2024 16:27:21 +0100 Subject: [PATCH 037/177] Name executable bootstrap, don't create symlink (#383) --- Plugins/AWSLambdaPackager/Plugin.swift | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/Plugins/AWSLambdaPackager/Plugin.swift b/Plugins/AWSLambdaPackager/Plugin.swift index 6bd0fcd0..4359ab1d 100644 --- a/Plugins/AWSLambdaPackager/Plugin.swift +++ b/Plugins/AWSLambdaPackager/Plugin.swift @@ -220,13 +220,8 @@ struct AWSLambdaPackager: CommandPlugin { try FileManager.default.createDirectory(atPath: workingDirectory.path(), withIntermediateDirectories: true) // rename artifact to "bootstrap" - let relocatedArtifactPath = workingDirectory.appending(path: artifactPath.lastPathComponent) - let symbolicLinkPath = workingDirectory.appending(path: "bootstrap") + let relocatedArtifactPath = workingDirectory.appending(path: "bootstrap") try FileManager.default.copyItem(atPath: artifactPath.path(), toPath: relocatedArtifactPath.path()) - try FileManager.default.createSymbolicLink( - atPath: symbolicLinkPath.path(), - withDestinationPath: relocatedArtifactPath.lastPathComponent - ) var arguments: [String] = [] #if os(macOS) || os(Linux) @@ -235,7 +230,6 @@ struct AWSLambdaPackager: CommandPlugin { "--symlinks", zipfilePath.lastPathComponent, relocatedArtifactPath.lastPathComponent, - symbolicLinkPath.lastPathComponent, ] #else throw Errors.unsupportedPlatform("can't or don't know how to create a zip file on this platform") From 8131a83bf2be546c467c10dad6246a50b956e2ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Mon, 30 Sep 2024 16:28:27 -0400 Subject: [PATCH 038/177] apply swift-format (#380) * apply swift-format * use swift-format script from swift-nio project --- Plugins/AWSLambdaPackager/PluginUtils.swift | 2 +- Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Plugins/AWSLambdaPackager/PluginUtils.swift b/Plugins/AWSLambdaPackager/PluginUtils.swift index 6f60f7c4..0cc3b5fe 100644 --- a/Plugins/AWSLambdaPackager/PluginUtils.swift +++ b/Plugins/AWSLambdaPackager/PluginUtils.swift @@ -13,9 +13,9 @@ //===----------------------------------------------------------------------===// import Dispatch +import Foundation import PackagePlugin import Synchronization -import Foundation @available(macOS 15.0, *) struct Utils { diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift index f36c7ee3..908e2ab2 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift @@ -14,15 +14,15 @@ import Foundation import Logging -import NIOCore import NIOConcurrencyHelpers +import NIOCore // We need `@unchecked` Sendable here, as `NIOLockedValueBox` does not understand `sending` today. // We don't want to use `NIOLockedValueBox` here anyway. We would love to use Mutex here, but this // sadly crashes the compiler today. public final class LambdaRuntime: @unchecked Sendable where Handler: StreamingLambdaHandler { // TODO: We want to change this to Mutex as soon as this doesn't crash the Swift compiler on Linux anymore - let handlerMutex: NIOLockedValueBox> + let handlerMutex: NIOLockedValueBox let logger: Logger let eventLoop: EventLoop From 426e658414fa696842666de111383f09a27477cf Mon Sep 17 00:00:00 2001 From: Jack Rosen Date: Tue, 8 Oct 2024 10:43:17 +0200 Subject: [PATCH 039/177] Add Support For Copying All Resources Into Final Executable (#386) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add Support For Copying All Resources Into Final Executable * Run formatter --------- Co-authored-by: Sébastien Stormacq --- Examples/LocalDebugging/Shared/Package.swift | 8 ++++- .../Shared/Sources/Shared/Resources/test.json | 1 + Plugins/AWSLambdaPackager/Plugin.swift | 35 +++++++++++-------- 3 files changed, 29 insertions(+), 15 deletions(-) create mode 100644 Examples/LocalDebugging/Shared/Sources/Shared/Resources/test.json diff --git a/Examples/LocalDebugging/Shared/Package.swift b/Examples/LocalDebugging/Shared/Package.swift index 2ac36e03..12d5eb9f 100644 --- a/Examples/LocalDebugging/Shared/Package.swift +++ b/Examples/LocalDebugging/Shared/Package.swift @@ -10,6 +10,12 @@ let package = Package( ], dependencies: [], targets: [ - .target(name: "Shared", dependencies: []) + .target( + name: "Shared", + dependencies: [], + resources: [ + .process("Resources") + ] + ) ] ) diff --git a/Examples/LocalDebugging/Shared/Sources/Shared/Resources/test.json b/Examples/LocalDebugging/Shared/Sources/Shared/Resources/test.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/Examples/LocalDebugging/Shared/Sources/Shared/Resources/test.json @@ -0,0 +1 @@ +{} diff --git a/Plugins/AWSLambdaPackager/Plugin.swift b/Plugins/AWSLambdaPackager/Plugin.swift index 4359ab1d..f342c770 100644 --- a/Plugins/AWSLambdaPackager/Plugin.swift +++ b/Plugins/AWSLambdaPackager/Plugin.swift @@ -133,14 +133,12 @@ struct AWSLambdaPackager: CommandPlugin { // because Examples' Package.swift have a dependency on ../.. // just like Package.swift's examples assume ../.., we assume we are two levels below the root project let slice = packageDirectory.pathComponents.suffix(2) - let beforeLastComponent = packageDirectory.pathComponents[slice.startIndex] - let lastComponent = packageDirectory.pathComponents[slice.endIndex - 1] try Utils.execute( executable: dockerToolPath, arguments: [ "run", "--rm", "--env", "LAMBDA_USE_LOCAL_DEPS=true", "-v", "\(packageDirectory.path())../..:/workspace", "-w", - "/workspace/\(beforeLastComponent)/\(lastComponent)", baseImage, "bash", "-cl", buildCommand, + "/workspace/\(slice.joined(separator: "/"))", baseImage, "bash", "-cl", buildCommand, ], logLevel: verboseLogging ? .debug : .output ) @@ -237,17 +235,26 @@ struct AWSLambdaPackager: CommandPlugin { // add resources var artifactPathComponents = artifactPath.pathComponents - _ = artifactPathComponents.removeLast() - let artifactDirectory = artifactPathComponents.joined(separator: "/") - let resourcesDirectoryName = "\(packageName)_\(product.name).resources" - let resourcesDirectory = artifactDirectory.appending(resourcesDirectoryName) - let relocatedResourcesDirectory = workingDirectory.appending(path: resourcesDirectoryName) - if FileManager.default.fileExists(atPath: resourcesDirectory) { - try FileManager.default.copyItem( - atPath: resourcesDirectory, - toPath: relocatedResourcesDirectory.path() - ) - arguments.append(resourcesDirectoryName) + _ = artifactPathComponents.removeFirst() // Get rid of beginning "/" + _ = artifactPathComponents.removeLast() // Get rid of the name of the package + let artifactDirectory = "/\(artifactPathComponents.joined(separator: "/"))" + for fileInArtifactDirectory in try FileManager.default.contentsOfDirectory(atPath: artifactDirectory) { + guard let artifactURL = URL(string: "\(artifactDirectory)/\(fileInArtifactDirectory)") else { + continue + } + + guard artifactURL.pathExtension == "resources" else { + continue // Not resources, so don't copy + } + let resourcesDirectoryName = artifactURL.lastPathComponent + let relocatedResourcesDirectory = workingDirectory.appending(path: resourcesDirectoryName) + if FileManager.default.fileExists(atPath: artifactURL.path()) { + try FileManager.default.copyItem( + atPath: artifactURL.path(), + toPath: relocatedResourcesDirectory.path() + ) + arguments.append(resourcesDirectoryName) + } } // run the zip tool From db17a62e389907f5a0f4ff46c2aa7ff9b69887fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Tue, 8 Oct 2024 05:07:47 -0400 Subject: [PATCH 040/177] Restructure Examples folder (#387) * Restructure Examples folder * add README * remove v1 examples * swift format --- .gitignore | 1 + Examples/APIGateway/.gitignore | 2 + Examples/APIGateway/Package.swift | 55 +++ Examples/APIGateway/README.md | 124 ++++++ Examples/APIGateway/Sources/main.swift | 40 ++ Examples/APIGateway/template.yaml | 31 ++ Examples/Benchmark/BenchmarkHandler.swift | 32 -- Examples/Benchmark/Package.swift | 34 -- Examples/Deployment/.dockerignore | 1 - Examples/Deployment/Dockerfile | 3 - Examples/Deployment/Package.swift | 43 -- Examples/Deployment/README.md | 184 --------- .../Sources/Benchmark/BenchmarkHandler.swift | 32 -- .../HelloWorld/HelloWorldHandler.swift | 23 -- .../scripts/SAM/Benchmark-template.yml | 14 - .../scripts/SAM/HelloWorld-template.yml | 14 - .../Deployment/scripts/build-and-package.sh | 39 -- Examples/Deployment/scripts/config.sh | 38 -- Examples/Deployment/scripts/deploy.sh | 43 -- Examples/Deployment/scripts/package.sh | 28 -- Examples/Deployment/scripts/sam-deploy.sh | 27 -- .../Deployment/scripts/serverless-deploy.sh | 29 -- .../Deployment/scripts/serverless-remove.sh | 27 -- .../scripts/serverless/Benchmark-template.yml | 20 - .../serverless/HelloWorld-template.yml | 20 - Examples/Echo/Package.swift | 34 -- Examples/ErrorHandling/Lambda.swift | 104 ----- Examples/ErrorHandling/Package.swift | 34 -- Examples/Foundation/Lambda.swift | 286 -------------- Examples/Foundation/Package.swift | 34 -- Examples/HelloWorld/.gitignore | 4 + Examples/HelloWorld/Package.swift | 52 +++ Examples/HelloWorld/README.md | 74 ++++ .../Sources/main.swift} | 13 +- Examples/JSON/Lambda.swift | 34 -- Examples/JSON/Package.swift | 34 -- .../contents.xcworkspacedata | 16 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 - .../xcshareddata/WorkspaceSettings.xcsettings | 8 - .../MyApp/MyApp.xcodeproj/project.pbxproj | 366 ------------------ .../AppIcon.appiconset/Contents.json | 98 ----- .../MyApp/MyApp/Assets.xcassets/Contents.json | 6 - .../MyApp/MyApp/ContentView.swift | 95 ----- .../LocalDebugging/MyApp/MyApp/MyApp.swift | 24 -- .../Preview Assets.xcassets/Contents.json | 6 - .../LocalDebugging/MyLambda/.dockerignore | 1 - Examples/LocalDebugging/MyLambda/Dockerfile | 3 - Examples/LocalDebugging/MyLambda/Lambda.swift | 27 -- .../LocalDebugging/MyLambda/Package.swift | 38 -- .../LocalDebugging/MyLambda/scripts/deploy.sh | 53 --- .../MyLambda/scripts/package.sh | 28 -- Examples/LocalDebugging/README.md | 35 -- Examples/LocalDebugging/Shared/Package.swift | 21 - .../Shared/Sources/Shared/Resources/test.json | 1 - .../Shared/Sources/Shared/Shared.swift | 35 -- Examples/ResourcePackaging/Lambda.swift | 28 -- Examples/ResourcePackaging/Package.swift | 37 -- Examples/ResourcePackaging/hello.txt | 1 - Examples/Testing/Package.swift | 36 -- Examples/Testing/Sources/Lambda.swift | 25 -- Examples/Testing/Tests/LambdaTests.swift | 27 -- 61 files changed, 389 insertions(+), 2241 deletions(-) create mode 100644 Examples/APIGateway/.gitignore create mode 100644 Examples/APIGateway/Package.swift create mode 100644 Examples/APIGateway/README.md create mode 100644 Examples/APIGateway/Sources/main.swift create mode 100644 Examples/APIGateway/template.yaml delete mode 100644 Examples/Benchmark/BenchmarkHandler.swift delete mode 100644 Examples/Benchmark/Package.swift delete mode 100644 Examples/Deployment/.dockerignore delete mode 100644 Examples/Deployment/Dockerfile delete mode 100644 Examples/Deployment/Package.swift delete mode 100644 Examples/Deployment/README.md delete mode 100644 Examples/Deployment/Sources/Benchmark/BenchmarkHandler.swift delete mode 100644 Examples/Deployment/Sources/HelloWorld/HelloWorldHandler.swift delete mode 100644 Examples/Deployment/scripts/SAM/Benchmark-template.yml delete mode 100644 Examples/Deployment/scripts/SAM/HelloWorld-template.yml delete mode 100755 Examples/Deployment/scripts/build-and-package.sh delete mode 100755 Examples/Deployment/scripts/config.sh delete mode 100755 Examples/Deployment/scripts/deploy.sh delete mode 100755 Examples/Deployment/scripts/package.sh delete mode 100755 Examples/Deployment/scripts/sam-deploy.sh delete mode 100755 Examples/Deployment/scripts/serverless-deploy.sh delete mode 100755 Examples/Deployment/scripts/serverless-remove.sh delete mode 100644 Examples/Deployment/scripts/serverless/Benchmark-template.yml delete mode 100644 Examples/Deployment/scripts/serverless/HelloWorld-template.yml delete mode 100644 Examples/Echo/Package.swift delete mode 100644 Examples/ErrorHandling/Lambda.swift delete mode 100644 Examples/ErrorHandling/Package.swift delete mode 100644 Examples/Foundation/Lambda.swift delete mode 100644 Examples/Foundation/Package.swift create mode 100644 Examples/HelloWorld/.gitignore create mode 100644 Examples/HelloWorld/Package.swift create mode 100644 Examples/HelloWorld/README.md rename Examples/{Echo/Lambda.swift => HelloWorld/Sources/main.swift} (65%) delete mode 100644 Examples/JSON/Lambda.swift delete mode 100644 Examples/JSON/Package.swift delete mode 100644 Examples/LocalDebugging/Example.xcworkspace/contents.xcworkspacedata delete mode 100644 Examples/LocalDebugging/Example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist delete mode 100644 Examples/LocalDebugging/Example.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings delete mode 100644 Examples/LocalDebugging/MyApp/MyApp.xcodeproj/project.pbxproj delete mode 100644 Examples/LocalDebugging/MyApp/MyApp/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 Examples/LocalDebugging/MyApp/MyApp/Assets.xcassets/Contents.json delete mode 100644 Examples/LocalDebugging/MyApp/MyApp/ContentView.swift delete mode 100644 Examples/LocalDebugging/MyApp/MyApp/MyApp.swift delete mode 100644 Examples/LocalDebugging/MyApp/MyApp/Preview Content/Preview Assets.xcassets/Contents.json delete mode 100644 Examples/LocalDebugging/MyLambda/.dockerignore delete mode 100644 Examples/LocalDebugging/MyLambda/Dockerfile delete mode 100644 Examples/LocalDebugging/MyLambda/Lambda.swift delete mode 100644 Examples/LocalDebugging/MyLambda/Package.swift delete mode 100755 Examples/LocalDebugging/MyLambda/scripts/deploy.sh delete mode 100755 Examples/LocalDebugging/MyLambda/scripts/package.sh delete mode 100644 Examples/LocalDebugging/README.md delete mode 100644 Examples/LocalDebugging/Shared/Package.swift delete mode 100644 Examples/LocalDebugging/Shared/Sources/Shared/Resources/test.json delete mode 100644 Examples/LocalDebugging/Shared/Sources/Shared/Shared.swift delete mode 100644 Examples/ResourcePackaging/Lambda.swift delete mode 100644 Examples/ResourcePackaging/Package.swift delete mode 100644 Examples/ResourcePackaging/hello.txt delete mode 100644 Examples/Testing/Package.swift delete mode 100644 Examples/Testing/Sources/Lambda.swift delete mode 100644 Examples/Testing/Tests/LambdaTests.swift diff --git a/.gitignore b/.gitignore index 000f5669..a5baf2c5 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ xcuserdata Package.resolved .serverless .vscode +Makefile diff --git a/Examples/APIGateway/.gitignore b/Examples/APIGateway/.gitignore new file mode 100644 index 00000000..e4044f6f --- /dev/null +++ b/Examples/APIGateway/.gitignore @@ -0,0 +1,2 @@ +samconfig.toml +Makefile diff --git a/Examples/APIGateway/Package.swift b/Examples/APIGateway/Package.swift new file mode 100644 index 00000000..a2df5b73 --- /dev/null +++ b/Examples/APIGateway/Package.swift @@ -0,0 +1,55 @@ +// swift-tools-version:6.0 + +import PackageDescription + +// needed for CI to test the local version of the library +import class Foundation.ProcessInfo +import struct Foundation.URL + +#if os(macOS) +let platforms: [PackageDescription.SupportedPlatform]? = [.macOS(.v15)] +#else +let platforms: [PackageDescription.SupportedPlatform]? = nil +#endif + +let package = Package( + name: "swift-aws-lambda-runtime-example", + platforms: platforms, + products: [ + .executable(name: "APIGAtewayLambda", targets: ["APIGAtewayLambda"]) + ], + dependencies: [ + // dependency on swift-aws-lambda-runtime is added dynamically below + // .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main") + + .package(url: "https://github.com/swift-server/swift-aws-lambda-events.git", branch: "main") + ], + targets: [ + .executableTarget( + name: "APIGAtewayLambda", + dependencies: [ + .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), + .product(name: "AWSLambdaEvents", package: "swift-aws-lambda-events"), + ], + path: "." + ) + ] +) + +if let localDepsPath = ProcessInfo.processInfo.environment["LAMBDA_USE_LOCAL_DEPS"], + localDepsPath != "", + let v = try? URL(fileURLWithPath: localDepsPath).resourceValues(forKeys: [.isDirectoryKey]), + let _ = v.isDirectory +{ + print("[INFO] Compiling against swift-aws-lambda-runtime located at \(localDepsPath)") + package.dependencies += [ + .package(name: "swift-aws-lambda-runtime", path: localDepsPath) + ] + +} else { + print("[INFO] LAMBDA_USE_LOCAL_DEPS is not pointing to your local swift-aws-lambda-runtime code") + print("[INFO] This project will compile against the main branch of the Lambda Runtime on GitHub") + package.dependencies += [ + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main") + ] +} diff --git a/Examples/APIGateway/README.md b/Examples/APIGateway/README.md new file mode 100644 index 00000000..ca731ec6 --- /dev/null +++ b/Examples/APIGateway/README.md @@ -0,0 +1,124 @@ +# API Gateway + +This is a simple example of an AWS Lambda function invoked through an Amazon API Gateway. + +## Code + +The Lambda function takes all HTTP headers it receives as input and returns them as output. + +The code creates a `LambdaRuntime` struct. In it's simplest form, the initializer takes a function as argument. The function is the handler that will be invoked when the API Gateway receives an HTTP request. + +The handler is `(event: APIGatewayV2Request, context: LambdaContext) -> APIGatewayV2Response`. The function takes two arguments: +- the event argument is a `APIGatewayV2Request`. It is the parameter passed by the API Gateway. It contains all data passed in the HTTP request and some meta data. +- the context argument is a `Lambda Context`. It is a description of the runtime context. + +The function must return a `APIGatewayV2Response`. + +`APIGatewayV2Request` and `APIGatewayV2Response` are defined in the [Swift AWS Lambda Events](https://github.com/swift-server/swift-aws-lambda-events) library. + +## Build & Package + +To build the package, type the following commands. + +```bash +swift build +swift package archive --disable-sandbox +``` + +If there is no error, there is a ZIP file ready to deploy. +The ZIP file is located at `.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/MyLambda/MyLambda.zip` + +## Deploy + +The deployment must include the Lambda function and the API Gateway. We use the [Serverless Application Model (SAM)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html) to deploy the infrastructure. + +**Prerequisites** : Install the [SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html) + +The example directory contains a file named `template.yaml` that describes the deployment. + +To actually deploy your Lambda function and create the infrastructure, type the following `sam` command. + +```bash +sam deploy \ +----resolve-s3 \ +--template-file template.yaml \ +--stack-name MyLambda \ +--capabilities CAPABILITY_IAM +``` + +At the end of the deployment, the script lists the API Gateway endpoint. +The output is similar to this one. + +``` +----------------------------------------------------------------------------------------------------------------------------- +Outputs +----------------------------------------------------------------------------------------------------------------------------- +Key APIGAtewayEndpoint +Description API Gateway endpoint UR" +Value https://a5q74es3k2.execute-api.us-east-1.amazonaws.com +----------------------------------------------------------------------------------------------------------------------------- +``` + +## Invoke your Lambda function + +To invoke the Lambda function, use this `curl` command line. + +```bash +curl https://a5q74es3k2.execute-api.us-east-1.amazonaws.com +``` + +Be sure to replace the URL with the API Gateway endpoint returned in the previous step. + +This should print a JSON similar to + +```bash +{"version":"2.0","rawPath":"\/","isBase64Encoded":false,"rawQueryString":"","headers":{"user-agent":"curl\/8.7.1","accept":"*\/*","host":"a5q74es3k2.execute-api.us-east-1.amazonaws.com","content-length":"0","x-amzn-trace-id":"Root=1-66fb0388-691f744d4bd3c99c7436a78d","x-forwarded-port":"443","x-forwarded-for":"81.0.0.43","x-forwarded-proto":"https"},"requestContext":{"requestId":"e719cgNpoAMEcwA=","http":{"sourceIp":"81.0.0.43","path":"\/","protocol":"HTTP\/1.1","userAgent":"curl\/8.7.1","method":"GET"},"stage":"$default","apiId":"a5q74es3k2","time":"30\/Sep\/2024:20:01:12 +0000","timeEpoch":1727726472922,"domainPrefix":"a5q74es3k2","domainName":"a5q74es3k2.execute-api.us-east-1.amazonaws.com","accountId":"012345678901"} +``` + +If you have `jq` installed, you can use it to pretty print the output. + +```bash +curl -s https://a5q74es3k2.execute-api.us-east-1.amazonaws.com | jq +{ + "version": "2.0", + "rawPath": "/", + "requestContext": { + "domainPrefix": "a5q74es3k2", + "stage": "$default", + "timeEpoch": 1727726558220, + "http": { + "protocol": "HTTP/1.1", + "method": "GET", + "userAgent": "curl/8.7.1", + "path": "/", + "sourceIp": "81.0.0.43" + }, + "apiId": "a5q74es3k2", + "accountId": "012345678901", + "requestId": "e72KxgsRoAMEMSA=", + "domainName": "a5q74es3k2.execute-api.us-east-1.amazonaws.com", + "time": "30/Sep/2024:20:02:38 +0000" + }, + "rawQueryString": "", + "routeKey": "$default", + "headers": { + "x-forwarded-for": "81.0.0.43", + "user-agent": "curl/8.7.1", + "host": "a5q74es3k2.execute-api.us-east-1.amazonaws.com", + "accept": "*/*", + "x-amzn-trace-id": "Root=1-66fb03de-07533930192eaf5f540db0cb", + "content-length": "0", + "x-forwarded-proto": "https", + "x-forwarded-port": "443" + }, + "isBase64Encoded": false +} +``` + +## Undeploy + +When done testing, you can delete the infrastructure with this command. + +```bash +sam delete +``` \ No newline at end of file diff --git a/Examples/APIGateway/Sources/main.swift b/Examples/APIGateway/Sources/main.swift new file mode 100644 index 00000000..2d5707d6 --- /dev/null +++ b/Examples/APIGateway/Sources/main.swift @@ -0,0 +1,40 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import AWSLambdaEvents +import AWSLambdaRuntime + +#if canImport(FoundationEssentials) +import FoundationEssentials +#else +import Foundation +#endif + +let encoder = JSONEncoder() +let runtime = LambdaRuntime { + (event: APIGatewayV2Request, context: LambdaContext) -> APIGatewayV2Response in + + var header = HTTPHeaders() + context.logger.debug("HTTP API Message received") + + header["content-type"] = "application/json" + + // echo the request in the response + let data = try encoder.encode(event) + let response = String(decoding: data, as: Unicode.UTF8.self) + + return APIGatewayV2Response(statusCode: .ok, headers: header, body: response) +} + +try await runtime.run() diff --git a/Examples/APIGateway/template.yaml b/Examples/APIGateway/template.yaml new file mode 100644 index 00000000..700c09b0 --- /dev/null +++ b/Examples/APIGateway/template.yaml @@ -0,0 +1,31 @@ +AWSTemplateFormatVersion: '2010-09-09' +Transform: AWS::Serverless-2016-10-31 +Description: SAM Template for QuoteService + +Resources: + # Lambda function + APIGAtewayLambda: + Type: AWS::Serverless::Function + Properties: + CodeUri: .build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/APIGAtewayLambda/APIGAtewayLambda.zip + Timeout: 60 + Handler: swift.bootstrap + Runtime: provided.al2 + MemorySize: 512 + Architectures: + - arm64 + Environment: + Variables: + # by default, AWS Lambda runtime produces no log + # use `LOG_LEVEL: debug` for for lifecycle and event handling information + # use `LOG_LEVEL: trace` for detailed input event information + LOG_LEVEL: trace + Events: + HttpApiEvent: + Type: HttpApi + +Outputs: + # print API Gateway endpoint + APIGAtewayEndpoint: + Description: API Gateway endpoint UR" + Value: !Sub "https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com" diff --git a/Examples/Benchmark/BenchmarkHandler.swift b/Examples/Benchmark/BenchmarkHandler.swift deleted file mode 100644 index d9cfce6e..00000000 --- a/Examples/Benchmark/BenchmarkHandler.swift +++ /dev/null @@ -1,32 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2020 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import AWSLambdaRuntimeCore -import NIOCore - -// If you would like to benchmark Swift's Lambda Runtime, -// use this example which is more performant. -// `EventLoopLambdaHandler` does not offload the Lambda processing to a separate thread -// while the closure-based handlers do. - -@main -struct BenchmarkHandler: EventLoopLambdaHandler { - static func makeHandler(context: LambdaInitializationContext) -> EventLoopFuture { - context.eventLoop.makeSucceededFuture(BenchmarkHandler()) - } - - func handle(_ event: String, context: LambdaContext) -> EventLoopFuture { - context.eventLoop.makeSucceededFuture("hello, world!") - } -} diff --git a/Examples/Benchmark/Package.swift b/Examples/Benchmark/Package.swift deleted file mode 100644 index b1fd0840..00000000 --- a/Examples/Benchmark/Package.swift +++ /dev/null @@ -1,34 +0,0 @@ -// swift-tools-version:5.7 - -import PackageDescription - -import class Foundation.ProcessInfo // needed for CI to test the local version of the library - -let package = Package( - name: "swift-aws-lambda-runtime-example", - platforms: [ - .macOS(.v12) - ], - products: [ - .executable(name: "MyLambda", targets: ["MyLambda"]) - ], - dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha") - ], - targets: [ - .executableTarget( - name: "MyLambda", - dependencies: [ - .product(name: "AWSLambdaRuntimeCore", package: "swift-aws-lambda-runtime") - ], - path: "." - ) - ] -) - -// for CI to test the local version of the library -if ProcessInfo.processInfo.environment["LAMBDA_USE_LOCAL_DEPS"] != nil { - package.dependencies = [ - .package(name: "swift-aws-lambda-runtime", path: "../..") - ] -} diff --git a/Examples/Deployment/.dockerignore b/Examples/Deployment/.dockerignore deleted file mode 100644 index 24e5b0a1..00000000 --- a/Examples/Deployment/.dockerignore +++ /dev/null @@ -1 +0,0 @@ -.build diff --git a/Examples/Deployment/Dockerfile b/Examples/Deployment/Dockerfile deleted file mode 100644 index 32962859..00000000 --- a/Examples/Deployment/Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -FROM swift:5.5-amazonlinux2 - -RUN yum -y install zip diff --git a/Examples/Deployment/Package.swift b/Examples/Deployment/Package.swift deleted file mode 100644 index b5351201..00000000 --- a/Examples/Deployment/Package.swift +++ /dev/null @@ -1,43 +0,0 @@ -// swift-tools-version:5.7 - -import PackageDescription - -import class Foundation.ProcessInfo // needed for CI to test the local version of the library - -let package = Package( - name: "swift-aws-lambda-runtime-samples", - platforms: [ - .macOS(.v12) - ], - products: [ - // introductory example - .executable(name: "HelloWorld", targets: ["HelloWorld"]), - // good for benchmarking - .executable(name: "Benchmark", targets: ["Benchmark"]), - // demonstrate different types of error handling - ], - dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha") - ], - targets: [ - .executableTarget( - name: "Benchmark", - dependencies: [ - .product(name: "AWSLambdaRuntimeCore", package: "swift-aws-lambda-runtime") - ] - ), - .executableTarget( - name: "HelloWorld", - dependencies: [ - .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") - ] - ), - ] -) - -// for CI to test the local version of the library -if ProcessInfo.processInfo.environment["LAMBDA_USE_LOCAL_DEPS"] != nil { - package.dependencies = [ - .package(name: "swift-aws-lambda-runtime", path: "../..") - ] -} diff --git a/Examples/Deployment/README.md b/Examples/Deployment/README.md deleted file mode 100644 index aca3e391..00000000 --- a/Examples/Deployment/README.md +++ /dev/null @@ -1,184 +0,0 @@ -# Deployment Examples - -This sample project is a collection of Lambda functions that demonstrates -how to write a simple Lambda function in Swift, and how to package and deploy it -to the AWS Lambda platform. - -The scripts are prepared to work from the `Deployment` folder. - -``` -git clone https://github.com/swift-server/swift-aws-lambda-runtime.git -cd swift-aws-lambda-runtime/Examples/Deployment -``` - -Note: The example scripts assume you have [jq](https://stedolan.github.io/jq/download/) command line tool installed. - -## Mac M1 Considerations - -Lambdas will run on an x86 processor by default. Building a Lambda with an M1 will create an arm-based executable which will not run on an x86 processor. Here are a few options for building Swift Lambdas on an M1: - -1. Configure the Lambda to run on the [Graviton2](https://aws.amazon.com/blogs/aws/aws-lambda-functions-powered-by-aws-graviton2-processor-run-your-functions-on-arm-and-get-up-to-34-better-price-performance/) Arm-based processor. -2. Build with the x86 architecture by specifying `--platform linux/amd64` in all Docker 'build' and 'run' commands in `build-and-package.sh`. - -## Deployment instructions using AWS CLI - -Steps to deploy this sample to AWS Lambda using the AWS CLI: - -1. Login to AWS Console and create an AWS Lambda with the following settings: - * Runtime: Custom runtime - * Handler: Can be any string, does not matter in this case - -2. Build, package and deploy the Lambda - - ``` - ./scripts/deploy.sh - ``` - - Notes: - - This script assumes you have AWS CLI installed and credentials setup in `~/.aws/credentials`. - - The default lambda function name is `SwiftSample`. You can specify a different one updating `lambda_name` in `deploy.sh` - - Update `s3_bucket=swift-lambda-test` in `deploy.sh` before running (AWS S3 buckets require a unique global name) - - Both lambda function and S3 bucket must exist before deploying for the first time. - -### Deployment instructions using AWS SAM (Serverless Application Model) - -AWS [Serverless Application Model](https://aws.amazon.com/serverless/sam/) (SAM) is an open-source framework for building serverless applications. This framework allows you to easily deploy other AWS resources and more complex deployment mechanisms such a CI pipelines. - -***Note:*** Deploying using SAM will automatically create resources within your AWS account. Charges may apply for these resources. - -To use SAM to deploy this sample to AWS: - -1. Install the AWS CLI by following the [instructions](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html). - -2. Install SAM CLI by following the [instructions](https://aws.amazon.com/serverless/sam/). - -3. Build, package and deploy the Lambda - - ``` - ./scripts/sam-deploy.sh --guided - ``` - -The script will ask you which sample Lambda you wish to deploy. It will then guide you through the SAM setup process. - - ``` - Setting default arguments for 'sam deploy' - ========================================= - Stack Name [sam-app]: swift-aws-lambda-runtime-sample - AWS Region [us-east-1]: - #Shows you resources changes to be deployed and require a 'Y' to initiate deploy - Confirm changes before deploy [y/N]: Y - #SAM needs permission to be able to create roles to connect to the resources in your template - Allow SAM CLI IAM role creation [Y/n]: Y - Save arguments to samconfig.toml [Y/n]: Y - ``` - -If you said yes to confirm changes, SAM will ask you to accept changes to the infrastructure you are setting up. For more on this, see [Cloud Formation](https://aws.amazon.com/cloudformation/). - -The `sam-deploy` script passes through any parameters to the SAM deploy command. - -4. Subsequent deploys can just use the command minus the `guided` parameter: - - ``` - ./scripts/sam-deploy.sh - ``` - -The script will ask you which sample Lambda you wish to deploy. If you are deploying a different sample lambda, the deploy process will pull down the previous Lambda. - -SAM will still ask you to confirm changes if you said yes to that initially. - -5. Testing - -For the API Gateway sample: - -The SAM template will provide an output labelled `LambdaApiGatewayEndpoint` which you can use to test the Lambda. For example: - - ``` - curl <> - ``` - -***Warning:*** This SAM template is only intended as a sample and creates a publicly accessible HTTP endpoint. - -For all other samples use the AWS Lambda console. - -### Deployment instructions using Serverless Framework (serverless.com) - -[Serverless framework](https://www.serverless.com/open-source/) (Serverless) is a provider agnostic, open-source framework for building serverless applications. This framework allows you to easily deploy other AWS resources and more complex deployment mechanisms such a CI pipelines. Serverless Framework offers solutions for not only deploying but also testing, monitoring, alerting, and security and is widely adopted by the industry and offers along the open-source version a paid one. - -***Note:*** Deploying using Serverless will automatically create resources within your AWS account. Charges may apply for these resources. - -To use Serverless to deploy this sample to AWS: - -1. Install the AWS CLI by following the [instructions](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html). - -2. Install Serverless by following the [instructions](https://www.serverless.com/framework/docs/getting-started/). -If you already have installed be sure you have the latest version. -The examples have been tested with the version 1.72.0. - -``` -Serverless --version -Framework Core: 1.72.0 (standalone) -Plugin: 3.6.13 -SDK: 2.3.1 -Components: 2.30.12 -``` - -3. Build, package and deploy the Lambda - - ``` - ./scripts/serverless-deploy.sh - ``` - -The script will ask you which sample Lambda you wish to deploy. - -The `serverless-deploy.sh` script passes through any parameters to the Serverless deploy command. - -4. Testing - -For the APIGateway sample: - -The Serverless template will provide an endpoint which you can use to test the Lambda. - -Outuput example: - -``` -... -... -Serverless: Stack update finished... -Service Information -service: apigateway-swift-aws -stage: dev -region: us-east-1 -stack: apigateway-swift-aws-dev -resources: 12 -api keys: - None -endpoints: - GET - https://r39lvhfng3.execute-api.us-east-1.amazonaws.com/api -functions: - httpGet: apigateway-swift-aws-dev-httpGet -layers: - None - -Stack Outputs -HttpGetLambdaFunctionQualifiedArn: arn:aws:lambda:us-east-1:XXXXXXXXX:function:apigateway-swift-aws-dev-httpGet:1 -ServerlessDeploymentBucketName: apigateway-swift-aws-dev-serverlessdeploymentbuck-ud51msgcrj1e -HttpApiUrl: https://r39lvhfng3.execute-api.us-east-1.amazonaws.com -``` - -For example: - - ``` - curl https://r39lvhfng3.execute-api.us-east-1.amazonaws.com/api - ``` - -***Warning:*** This Serverless template is only intended as a sample and creates a publicly accessible HTTP endpoint. - -For all other samples use the AWS Lambda console. - -4. Remove - - ``` - ./scripts/serverless-remove.sh - ``` - -The script will ask you which sample Lambda you wish to remove from the previous deployment. diff --git a/Examples/Deployment/Sources/Benchmark/BenchmarkHandler.swift b/Examples/Deployment/Sources/Benchmark/BenchmarkHandler.swift deleted file mode 100644 index d9cfce6e..00000000 --- a/Examples/Deployment/Sources/Benchmark/BenchmarkHandler.swift +++ /dev/null @@ -1,32 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2020 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import AWSLambdaRuntimeCore -import NIOCore - -// If you would like to benchmark Swift's Lambda Runtime, -// use this example which is more performant. -// `EventLoopLambdaHandler` does not offload the Lambda processing to a separate thread -// while the closure-based handlers do. - -@main -struct BenchmarkHandler: EventLoopLambdaHandler { - static func makeHandler(context: LambdaInitializationContext) -> EventLoopFuture { - context.eventLoop.makeSucceededFuture(BenchmarkHandler()) - } - - func handle(_ event: String, context: LambdaContext) -> EventLoopFuture { - context.eventLoop.makeSucceededFuture("hello, world!") - } -} diff --git a/Examples/Deployment/Sources/HelloWorld/HelloWorldHandler.swift b/Examples/Deployment/Sources/HelloWorld/HelloWorldHandler.swift deleted file mode 100644 index 9f4a16f3..00000000 --- a/Examples/Deployment/Sources/HelloWorld/HelloWorldHandler.swift +++ /dev/null @@ -1,23 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2020 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import AWSLambdaRuntime - -// introductory example, the obligatory "hello, world!" -@main -struct HelloWorldHandler: SimpleLambdaHandler { - func handle(_ event: String, context: LambdaContext) async throws -> String { - "hello, world" - } -} diff --git a/Examples/Deployment/scripts/SAM/Benchmark-template.yml b/Examples/Deployment/scripts/SAM/Benchmark-template.yml deleted file mode 100644 index 55100d12..00000000 --- a/Examples/Deployment/scripts/SAM/Benchmark-template.yml +++ /dev/null @@ -1,14 +0,0 @@ -AWSTemplateFormatVersion : '2010-09-09' -Transform: AWS::Serverless-2016-10-31 -Description: A sample SAM template for deploying Lambda functions. - -Resources: -# Benchmark Function - benchmarkFunction: - Type: AWS::Serverless::Function - Properties: - Handler: Provided - Runtime: provided - CodeUri: ../../.build/lambda/Benchmark/lambda.zip -# Instructs new versions to be published to an alias named "live". - AutoPublishAlias: live diff --git a/Examples/Deployment/scripts/SAM/HelloWorld-template.yml b/Examples/Deployment/scripts/SAM/HelloWorld-template.yml deleted file mode 100644 index 22b09df7..00000000 --- a/Examples/Deployment/scripts/SAM/HelloWorld-template.yml +++ /dev/null @@ -1,14 +0,0 @@ -AWSTemplateFormatVersion : '2010-09-09' -Transform: AWS::Serverless-2016-10-31 -Description: A sample SAM template for deploying Lambda functions. - -Resources: -# HelloWorld Function - helloWorldFunction: - Type: AWS::Serverless::Function - Properties: - Handler: Provided - Runtime: provided - CodeUri: ../../.build/lambda/HelloWorld/lambda.zip -# Instructs new versions to be published to an alias named "live". - AutoPublishAlias: live diff --git a/Examples/Deployment/scripts/build-and-package.sh b/Examples/Deployment/scripts/build-and-package.sh deleted file mode 100755 index f1e0a922..00000000 --- a/Examples/Deployment/scripts/build-and-package.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash -##===----------------------------------------------------------------------===## -## -## This source file is part of the SwiftAWSLambdaRuntime open source project -## -## Copyright (c) 2020 Apple Inc. and the SwiftAWSLambdaRuntime project authors -## Licensed under Apache License v2.0 -## -## See LICENSE.txt for license information -## See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -## -## SPDX-License-Identifier: Apache-2.0 -## -##===----------------------------------------------------------------------===## - -set -eu - -executable=$1 -workspace="$(pwd)/../.." - -echo "-------------------------------------------------------------------------" -echo "preparing docker build image" -echo "-------------------------------------------------------------------------" -docker build . -t builder -echo "done" - -echo "-------------------------------------------------------------------------" -echo "building \"$executable\" lambda" -echo "-------------------------------------------------------------------------" -docker run --rm -v "$workspace":/workspace -w /workspace/Examples/Deployment builder \ - bash -cl "swift build --product $executable -c release" -echo "done" - -echo "-------------------------------------------------------------------------" -echo "packaging \"$executable\" lambda" -echo "-------------------------------------------------------------------------" -docker run --rm -v "$workspace":/workspace -w /workspace/Examples/Deployment builder \ - bash -cl "./scripts/package.sh $executable" -echo "done" diff --git a/Examples/Deployment/scripts/config.sh b/Examples/Deployment/scripts/config.sh deleted file mode 100755 index d4ab9f6f..00000000 --- a/Examples/Deployment/scripts/config.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash -##===----------------------------------------------------------------------===## -## -## This source file is part of the SwiftAWSLambdaRuntime open source project -## -## Copyright (c) 2017-2018 Apple Inc. and the SwiftAWSLambdaRuntime project authors -## Licensed under Apache License v2.0 -## -## See LICENSE.txt for license information -## See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -## -## SPDX-License-Identifier: Apache-2.0 -## -##===----------------------------------------------------------------------===## - -DIR="$(cd "$(dirname "$0")" && pwd)" -executables=( $(swift package dump-package | sed -e 's|: null|: ""|g' | jq '.products[] | (select(.type.executable)) | .name' | sed -e 's|"||g') ) - -if [[ ${#executables[@]} = 0 ]]; then - echo "no executables found" - exit 1 -elif [[ ${#executables[@]} = 1 ]]; then - executable=${executables[0]} -elif [[ ${#executables[@]} > 1 ]]; then - echo "multiple executables found:" - for executable in ${executables[@]}; do - echo " * $executable" - done - echo "" - read -p "select which executables to deploy: " executable -fi - -echo "-------------------------------------------------------------------------" -echo "configuration" -echo "-------------------------------------------------------------------------" -echo "current dir: $DIR" -echo "executable: $executable" -echo "-------------------------------------------------------------------------" diff --git a/Examples/Deployment/scripts/deploy.sh b/Examples/Deployment/scripts/deploy.sh deleted file mode 100755 index 3720b4d0..00000000 --- a/Examples/Deployment/scripts/deploy.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash -##===----------------------------------------------------------------------===## -## -## This source file is part of the SwiftAWSLambdaRuntime open source project -## -## Copyright (c) 2020 Apple Inc. and the SwiftAWSLambdaRuntime project authors -## Licensed under Apache License v2.0 -## -## See LICENSE.txt for license information -## See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -## -## SPDX-License-Identifier: Apache-2.0 -## -##===----------------------------------------------------------------------===## - -set -eu - -DIR="$(cd "$(dirname "$0")" && pwd)" -source $DIR/config.sh - -workspace="$DIR/../.." - -echo -e "\ndeploying $executable" - -$DIR/build-and-package.sh "$executable" - -echo "-------------------------------------------------------------------------" -echo "uploading \"$executable\" lambda to AWS S3" -echo "-------------------------------------------------------------------------" - -read -p "S3 bucket name to upload zip file (must exist in AWS S3): " s3_bucket -s3_bucket=${s3_bucket:-swift-lambda-test} # default for easy testing - -aws s3 cp ".build/lambda/$executable/lambda.zip" "s3://$s3_bucket/" - -echo "-------------------------------------------------------------------------" -echo "updating AWS Lambda to use \"$executable\"" -echo "-------------------------------------------------------------------------" - -read -p "Lambda Function name (must exist in AWS Lambda): " lambda_name -lambda_name=${lambda_name:-SwiftSample} # default for easy testing - -aws lambda update-function-code --function "$lambda_name" --s3-bucket "$s3_bucket" --s3-key lambda.zip diff --git a/Examples/Deployment/scripts/package.sh b/Examples/Deployment/scripts/package.sh deleted file mode 100755 index 17d5853b..00000000 --- a/Examples/Deployment/scripts/package.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -##===----------------------------------------------------------------------===## -## -## This source file is part of the SwiftAWSLambdaRuntime open source project -## -## Copyright (c) 2020 Apple Inc. and the SwiftAWSLambdaRuntime project authors -## Licensed under Apache License v2.0 -## -## See LICENSE.txt for license information -## See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -## -## SPDX-License-Identifier: Apache-2.0 -## -##===----------------------------------------------------------------------===## - -set -eu - -executable=$1 - -target=".build/lambda/$executable" -rm -rf "$target" -mkdir -p "$target" -cp ".build/release/$executable" "$target/" -# add the target deps based on ldd -ldd ".build/release/$executable" | grep swift | awk '{print $3}' | xargs cp -Lv -t "$target" -cd "$target" -ln -s "$executable" "bootstrap" -zip --symlinks lambda.zip * diff --git a/Examples/Deployment/scripts/sam-deploy.sh b/Examples/Deployment/scripts/sam-deploy.sh deleted file mode 100755 index d87d966d..00000000 --- a/Examples/Deployment/scripts/sam-deploy.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -##===----------------------------------------------------------------------===## -## -## This source file is part of the SwiftAWSLambdaRuntime open source project -## -## Copyright (c) 2017-2018 Apple Inc. and the SwiftAWSLambdaRuntime project authors -## Licensed under Apache License v2.0 -## -## See LICENSE.txt for license information -## See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -## -## SPDX-License-Identifier: Apache-2.0 -## -##===----------------------------------------------------------------------===## - -DIR="$(cd "$(dirname "$0")" && pwd)" -source $DIR/config.sh - -echo -e "\ndeploying $executable" - -$DIR/build-and-package.sh "$executable" - -echo "-------------------------------------------------------------------------" -echo "deploying using SAM" -echo "-------------------------------------------------------------------------" - -sam deploy --template "./scripts/SAM/$executable-template.yml" $@ diff --git a/Examples/Deployment/scripts/serverless-deploy.sh b/Examples/Deployment/scripts/serverless-deploy.sh deleted file mode 100755 index 241ee7bf..00000000 --- a/Examples/Deployment/scripts/serverless-deploy.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash -##===----------------------------------------------------------------------===## -## -## This source file is part of the SwiftAWSLambdaRuntime open source project -## -## Copyright (c) 2017-2018 Apple Inc. and the SwiftAWSLambdaRuntime project authors -## Licensed under Apache License v2.0 -## -## See LICENSE.txt for license information -## See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -## -## SPDX-License-Identifier: Apache-2.0 -## -##===----------------------------------------------------------------------===## - -set -eu - -DIR="$(cd "$(dirname "$0")" && pwd)" -source $DIR/config.sh - -echo -e "\ndeploying $executable" - -$DIR/build-and-package.sh "$executable" - -echo "-------------------------------------------------------------------------" -echo "deploying using Serverless" -echo "-------------------------------------------------------------------------" - -serverless deploy --config "./scripts/serverless/$executable-template.yml" --stage dev -v diff --git a/Examples/Deployment/scripts/serverless-remove.sh b/Examples/Deployment/scripts/serverless-remove.sh deleted file mode 100755 index 262c07cb..00000000 --- a/Examples/Deployment/scripts/serverless-remove.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -##===----------------------------------------------------------------------===## -## -## This source file is part of the SwiftAWSLambdaRuntime open source project -## -## Copyright (c) 2017-2018 Apple Inc. and the SwiftAWSLambdaRuntime project authors -## Licensed under Apache License v2.0 -## -## See LICENSE.txt for license information -## See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -## -## SPDX-License-Identifier: Apache-2.0 -## -##===----------------------------------------------------------------------===## - -set -eu - -DIR="$(cd "$(dirname "$0")" && pwd)" -source $DIR/config.sh - -echo -e "\nremoving $executable" - -echo "-------------------------------------------------------------------------" -echo "removing using Serverless" -echo "-------------------------------------------------------------------------" - -serverless remove --config "./scripts/serverless/$executable-template.yml" --stage dev -v diff --git a/Examples/Deployment/scripts/serverless/Benchmark-template.yml b/Examples/Deployment/scripts/serverless/Benchmark-template.yml deleted file mode 100644 index 1b2b1940..00000000 --- a/Examples/Deployment/scripts/serverless/Benchmark-template.yml +++ /dev/null @@ -1,20 +0,0 @@ -service: benchmark-swift-aws - -package: - artifact: .build/lambda/Benchmark/lambda.zip - -provider: - name: aws - runtime: provided - iamRoleStatements: - - Effect: Allow - Action: - - logs:CreateLogGroup - - logs:CreateLogStream - - logs:PutLogEvents - Resource: "*" - -functions: - benchmarkFunction: - handler: Benchmark - memorySize: 128 \ No newline at end of file diff --git a/Examples/Deployment/scripts/serverless/HelloWorld-template.yml b/Examples/Deployment/scripts/serverless/HelloWorld-template.yml deleted file mode 100644 index 8d12bb74..00000000 --- a/Examples/Deployment/scripts/serverless/HelloWorld-template.yml +++ /dev/null @@ -1,20 +0,0 @@ -service: helloworld-swift-aws - -package: - artifact: .build/lambda/HelloWorld/lambda.zip - -provider: - name: aws - runtime: provided - iamRoleStatements: - - Effect: Allow - Action: - - logs:CreateLogGroup - - logs:CreateLogStream - - logs:PutLogEvents - Resource: "*" - -functions: - hello: - handler: HelloWorld - memorySize: 128 \ No newline at end of file diff --git a/Examples/Echo/Package.swift b/Examples/Echo/Package.swift deleted file mode 100644 index 5ae207a8..00000000 --- a/Examples/Echo/Package.swift +++ /dev/null @@ -1,34 +0,0 @@ -// swift-tools-version:5.7 - -import PackageDescription - -import class Foundation.ProcessInfo // needed for CI to test the local version of the library - -let package = Package( - name: "swift-aws-lambda-runtime-example", - platforms: [ - .macOS(.v12) - ], - products: [ - .executable(name: "MyLambda", targets: ["MyLambda"]) - ], - dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha") - ], - targets: [ - .executableTarget( - name: "MyLambda", - dependencies: [ - .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") - ], - path: "." - ) - ] -) - -// for CI to test the local version of the library -if ProcessInfo.processInfo.environment["LAMBDA_USE_LOCAL_DEPS"] != nil { - package.dependencies = [ - .package(name: "swift-aws-lambda-runtime", path: "../..") - ] -} diff --git a/Examples/ErrorHandling/Lambda.swift b/Examples/ErrorHandling/Lambda.swift deleted file mode 100644 index d8e560aa..00000000 --- a/Examples/ErrorHandling/Lambda.swift +++ /dev/null @@ -1,104 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2020 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import AWSLambdaRuntime - -// MARK: - Run Lambda - -@main -struct MyLambda: SimpleLambdaHandler { - func handle(_ request: Request, context: LambdaContext) async throws -> Response { - // switch over the error type "requested" by the request, and trigger such error accordingly - switch request.error { - // no error here! - case .none: - return Response(awsRequestID: context.requestID, requestID: request.requestID, status: .ok) - // trigger a "managed" error - domain specific business logic failure - case .managed: - return Response(awsRequestID: context.requestID, requestID: request.requestID, status: .error) - // trigger an "unmanaged" error - an unexpected Swift Error triggered while processing the request - case .unmanaged(let error): - throw UnmanagedError(description: error) - // trigger a "fatal" error - a panic type error which will crash the process - case .fatal: - fatalError("crash!") - } - } -} - -// MARK: - Request and Response - -struct Request: Codable { - let requestID: String - let error: Error - - public init(requestID: String, error: Error? = nil) { - self.requestID = requestID - self.error = error ?? .none - } - - public enum Error: Codable, RawRepresentable { - case none - case managed - case unmanaged(String) - case fatal - - public init?(rawValue: String) { - switch rawValue { - case "none": - self = .none - case "managed": - self = .managed - case "fatal": - self = .fatal - default: - self = .unmanaged(rawValue) - } - } - - public var rawValue: String { - switch self { - case .none: - return "none" - case .managed: - return "managed" - case .fatal: - return "fatal" - case .unmanaged(let error): - return error - } - } - } -} - -struct Response: Codable { - let awsRequestID: String - let requestID: String - let status: Status - - public init(awsRequestID: String, requestID: String, status: Status) { - self.awsRequestID = awsRequestID - self.requestID = requestID - self.status = status - } - - public enum Status: Int, Codable { - case ok - case error - } -} - -struct UnmanagedError: Error { - let description: String -} diff --git a/Examples/ErrorHandling/Package.swift b/Examples/ErrorHandling/Package.swift deleted file mode 100644 index 5ae207a8..00000000 --- a/Examples/ErrorHandling/Package.swift +++ /dev/null @@ -1,34 +0,0 @@ -// swift-tools-version:5.7 - -import PackageDescription - -import class Foundation.ProcessInfo // needed for CI to test the local version of the library - -let package = Package( - name: "swift-aws-lambda-runtime-example", - platforms: [ - .macOS(.v12) - ], - products: [ - .executable(name: "MyLambda", targets: ["MyLambda"]) - ], - dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha") - ], - targets: [ - .executableTarget( - name: "MyLambda", - dependencies: [ - .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") - ], - path: "." - ) - ] -) - -// for CI to test the local version of the library -if ProcessInfo.processInfo.environment["LAMBDA_USE_LOCAL_DEPS"] != nil { - package.dependencies = [ - .package(name: "swift-aws-lambda-runtime", path: "../..") - ] -} diff --git a/Examples/Foundation/Lambda.swift b/Examples/Foundation/Lambda.swift deleted file mode 100644 index f58863b9..00000000 --- a/Examples/Foundation/Lambda.swift +++ /dev/null @@ -1,286 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2020 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import AWSLambdaRuntime -import Dispatch -import Foundation -import Logging - -#if canImport(FoundationNetworking) && canImport(FoundationXML) -import FoundationNetworking -import FoundationXML -#endif - -// MARK: - Run Lambda - -@main -struct MyLambda: LambdaHandler { - let calculator: ExchangeRatesCalculator - - init(context: LambdaInitializationContext) async throws { - // the ExchangeRatesCalculator() can be reused over and over - self.calculator = ExchangeRatesCalculator() - } - - func handle(_ event: Request, context: LambdaContext) async throws -> [Exchange] { - try await withCheckedThrowingContinuation { continuation in - self.calculator.run(logger: context.logger) { result in - switch result { - case .success(let exchanges): - continuation.resume(returning: exchanges) - case .failure(let error): - continuation.resume(throwing: error) - } - } - } - } -} - -// MARK: - Business Logic - -// This is a contrived example performing currency exchange rate lookup and conversion using URLSession and XML parsing -struct ExchangeRatesCalculator { - static let currencies = ["EUR", "USD", "JPY"] - static let currenciesEmojies = [ - "EUR": "💶", - "JPY": "💴", - "USD": "💵", - ] - - let locale: Locale - let calendar: Calendar - - init() { - // This is data from HMRC, the UK tax authority. Therefore we want to use their locale when interpreting data from the server. - self.locale = Locale(identifier: "en_GB") - // Use the UK calendar, not the system one. - var calendar = self.locale.calendar - calendar.timeZone = TimeZone(identifier: "UTC")! - self.calendar = calendar - } - - func run(logger: Logger, callback: @escaping (Result<[Exchange], Swift.Error>) -> Void) { - let startDate = Date() - let months = (1...12).map { - self.calendar.date(byAdding: DateComponents(month: -$0), to: startDate)! - } - - self.download( - logger: logger, - months: months, - monthIndex: months.startIndex, - currencies: Self.currencies, - state: [:] - ) { result in - - switch result { - case .failure(let error): - return callback(.failure(error)) - case .success(let downloadedDataByMonth): - logger.debug("Downloads complete") - - var result = [Exchange]() - var previousData: [String: Decimal?] = [:] - for (_, exchangeRateData) in downloadedDataByMonth.filter({ $1.period != nil }).sorted(by: { - $0.key < $1.key - }) { - for (currencyCode, rate) in exchangeRateData.ratesByCurrencyCode.sorted(by: { $0.key < $1.key }) { - if let rate = rate, let currencyEmoji = Self.currenciesEmojies[currencyCode] { - let change: Exchange.Change - switch previousData[currencyCode] { - case .some(.some(let previousRate)) where rate > previousRate: - change = .up - case .some(.some(let previousRate)) where rate < previousRate: - change = .down - case .some(.some(let previousRate)) where rate == previousRate: - change = .none - default: - change = .unknown - } - result.append( - Exchange( - date: exchangeRateData.period!.start, - from: .init(symbol: "GBP", emoji: "💷"), - to: .init(symbol: currencyCode, emoji: currencyEmoji), - rate: rate, - change: change - ) - ) - } - } - previousData = exchangeRateData.ratesByCurrencyCode - } - callback(.success(result)) - } - } - } - - private func download( - logger: Logger, - months: [Date], - monthIndex: Array.Index, - currencies: [String], - state: [Date: ExchangeRates], - callback: @escaping ((Result<[Date: ExchangeRates], Swift.Error>) -> Void) - ) { - if monthIndex == months.count { - return callback(.success(state)) - } - - var newState = state - - let month = months[monthIndex] - let url = self.exchangeRatesURL(forMonthContaining: month) - logger.debug("requesting exchange rate from \(url)") - let dataTask = URLSession.shared.dataTask(with: url) { data, _, error in - do { - guard let data = data else { - throw error! - } - let exchangeRates = try self.parse(data: data, currencyCodes: Set(currencies)) - newState[month] = exchangeRates - logger.debug("Finished downloading month: \(month)") - if let period = exchangeRates.period { - logger.debug("Got data covering period: \(period)") - } - } catch { - return callback(.failure(error)) - } - self.download( - logger: logger, - months: months, - monthIndex: monthIndex.advanced(by: 1), - currencies: currencies, - state: newState, - callback: callback - ) - } - dataTask.resume() - } - - private func parse(data: Data, currencyCodes: Set) throws -> ExchangeRates { - let document = try XMLDocument(data: data) - let dateFormatter = DateFormatter() - dateFormatter.timeZone = TimeZone(identifier: "Etc/UTC")! - dateFormatter.dateFormat = "dd/MMM/yy" - let interval: DateInterval? - if let period = try document.nodes(forXPath: "/exchangeRateMonthList/@Period").first?.stringValue, - period.count == 26 - { - // "01/Sep/2018 to 30/Sep/2018" - let startString = period[period.startIndex.. DateFormatter { - let utcTimeZone = TimeZone(identifier: "UTC")! - let result = DateFormatter() - result.locale = Locale(identifier: "en_US_POSIX") - result.timeZone = utcTimeZone - result.dateFormat = dateFormat - return result - } - - private func exchangeRatesURL(forMonthContaining date: Date) -> URL { - let exchangeRatesBaseURL = URL(string: "https://www.hmrc.gov.uk/softwaredevelopers/rates")! - let dateFormatter = self.makeUTCDateFormatter(dateFormat: "MMyy") - return exchangeRatesBaseURL.appendingPathComponent("exrates-monthly-\(dateFormatter.string(from: date)).xml") - } - - private typealias ExchangeRates = (period: DateInterval?, ratesByCurrencyCode: [String: Decimal?]) - - private struct Error: Swift.Error, CustomStringConvertible { - let description: String - } -} - -// MARK: - Request and Response - -struct Request: Decodable {} - -struct Exchange: Encodable { - @DateCoding - var date: Date - let from: Currency - let to: Currency - let rate: Decimal - let change: Change - - struct Currency: Encodable { - let symbol: String - let emoji: String - } - - enum Change: String, Encodable { - case up - case down - case none - case unknown - } - - @propertyWrapper - public struct DateCoding: Encodable { - public let wrappedValue: Date - - public init(wrappedValue: Date) { - self.wrappedValue = wrappedValue - } - - func encode(to encoder: Encoder) throws { - let string = Self.dateFormatter.string(from: self.wrappedValue) - var container = encoder.singleValueContainer() - try container.encode(string) - } - - private static var dateFormatter: ISO8601DateFormatter { - let dateFormatter = ISO8601DateFormatter() - dateFormatter.timeZone = TimeZone(identifier: "UTC")! - dateFormatter.formatOptions = [.withYear, .withMonth, .withDashSeparatorInDate] - return dateFormatter - } - } -} diff --git a/Examples/Foundation/Package.swift b/Examples/Foundation/Package.swift deleted file mode 100644 index 5ae207a8..00000000 --- a/Examples/Foundation/Package.swift +++ /dev/null @@ -1,34 +0,0 @@ -// swift-tools-version:5.7 - -import PackageDescription - -import class Foundation.ProcessInfo // needed for CI to test the local version of the library - -let package = Package( - name: "swift-aws-lambda-runtime-example", - platforms: [ - .macOS(.v12) - ], - products: [ - .executable(name: "MyLambda", targets: ["MyLambda"]) - ], - dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha") - ], - targets: [ - .executableTarget( - name: "MyLambda", - dependencies: [ - .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") - ], - path: "." - ) - ] -) - -// for CI to test the local version of the library -if ProcessInfo.processInfo.environment["LAMBDA_USE_LOCAL_DEPS"] != nil { - package.dependencies = [ - .package(name: "swift-aws-lambda-runtime", path: "../..") - ] -} diff --git a/Examples/HelloWorld/.gitignore b/Examples/HelloWorld/.gitignore new file mode 100644 index 00000000..e41d0be5 --- /dev/null +++ b/Examples/HelloWorld/.gitignore @@ -0,0 +1,4 @@ +response.json +samconfig.toml +template.yaml +Makefile diff --git a/Examples/HelloWorld/Package.swift b/Examples/HelloWorld/Package.swift new file mode 100644 index 00000000..6468fb88 --- /dev/null +++ b/Examples/HelloWorld/Package.swift @@ -0,0 +1,52 @@ +// swift-tools-version:6.0 + +import PackageDescription + +// needed for CI to test the local version of the library +import class Foundation.ProcessInfo +import struct Foundation.URL + +#if os(macOS) +let platforms: [PackageDescription.SupportedPlatform]? = [.macOS(.v15)] +#else +let platforms: [PackageDescription.SupportedPlatform]? = nil +#endif + +let package = Package( + name: "swift-aws-lambda-runtime-example", + platforms: platforms, + products: [ + .executable(name: "MyLambda", targets: ["MyLambda"]) + ], + dependencies: [ + // dependency on swift-aws-lambda-runtime is added dynamically below + // .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main") + ], + targets: [ + .executableTarget( + name: "MyLambda", + dependencies: [ + .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") + ], + path: "." + ) + ] +) + +if let localDepsPath = ProcessInfo.processInfo.environment["LAMBDA_USE_LOCAL_DEPS"], + localDepsPath != "", + let v = try? URL(fileURLWithPath: localDepsPath).resourceValues(forKeys: [.isDirectoryKey]), + let _ = v.isDirectory +{ + print("[INFO] Compiling against swift-aws-lambda-runtime located at \(localDepsPath)") + package.dependencies += [ + .package(name: "swift-aws-lambda-runtime", path: localDepsPath) + ] + +} else { + print("[INFO] LAMBDA_USE_LOCAL_DEPS is not pointing to your local swift-aws-lambda-runtime code") + print("[INFO] This project will compile against the main branch of the Lambda Runtime on GitHub") + package.dependencies += [ + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main") + ] +} diff --git a/Examples/HelloWorld/README.md b/Examples/HelloWorld/README.md new file mode 100644 index 00000000..e3e2e08b --- /dev/null +++ b/Examples/HelloWorld/README.md @@ -0,0 +1,74 @@ +# Hello World + +This is a simple example of an AWS Lambda function that takes a `String` as input parameter and returns a `String` as response. + +## Code + +The code creates a `LambdaRuntime` struct. In it's simplest form, the initializer takes a function as argument. The function is the handler that will be invoked when an event triggers the Lambda function. + +The handler is `(event: String, context: LambdaContext)`. The function takes two arguments: +- the event argument is a `String`. It is the parameter passed when invoking the function. +- the context argument is a `Lambda Context`. It is a description of the runtime context. + +The function return value will be encoded as your Lambda function response. + +## Build & Package + +To build & archive the package, type the following commands. + +```bash +swift build +swift package archive --disable-sandbox +``` + +If there is no error, there is a ZIP file ready to deploy. +The ZIP file is located at `.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/MyLambda/MyLambda.zip` + +## Deploy + +Here is how to deploy using the `aws` command line. + +```bash +aws lambda create-function \ +--function-name MyLambda \ +--zip-file fileb://.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/MyLambda/MyLambda.zip \ +--runtime provided.al2 \ +--handler provided \ +--architectures arm64 \ +--role arn:aws:iam:::role/lambda_basic_execution +``` + +The `--architectures` flag is only required when you build the binary on an Apple Silicon machine (Apple M1 or more recent). It defaults to `x64`. + +Be sure to replace with your actual AWS account ID (for example: 012345678901). + +## Invoke your Lambda function + +To invoke the Lambda function, use this `aws` command line. + +```bash +aws lambda invoke \ +--function-name MyLambda \ +--payload $(echo \"Seb\" | base64) \ +out.txt && cat out.txt && rm out.txt +``` + +Note that the payload is expected to be a valid JSON string, hence the surroundings quotes (`"`). + +This should output the following result. + +``` +{ + "StatusCode": 200, + "ExecutedVersion": "$LATEST" +} +"Hello Seb" +``` + +## Undeploy + +When done testing, you can delete the Lambda function with this command. + +```bash +aws lambda delete-function --function-name MyLambda +``` \ No newline at end of file diff --git a/Examples/Echo/Lambda.swift b/Examples/HelloWorld/Sources/main.swift similarity index 65% rename from Examples/Echo/Lambda.swift rename to Examples/HelloWorld/Sources/main.swift index 00c0a5e5..5aab1a79 100644 --- a/Examples/Echo/Lambda.swift +++ b/Examples/HelloWorld/Sources/main.swift @@ -2,7 +2,7 @@ // // This source file is part of the SwiftAWSLambdaRuntime open source project // -// Copyright (c) 2021 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors // Licensed under Apache License v2.0 // // See LICENSE.txt for license information @@ -16,10 +16,9 @@ import AWSLambdaRuntime // in this example we are receiving and responding with strings -@main -struct MyLambda: SimpleLambdaHandler { - func handle(_ input: String, context: LambdaContext) async throws -> String { - // as an example, respond with the input's reversed - String(input.reversed()) - } +let runtime = LambdaRuntime { + (event: String, context: LambdaContext) in + "Hello \(event)" } + +try await runtime.run() diff --git a/Examples/JSON/Lambda.swift b/Examples/JSON/Lambda.swift deleted file mode 100644 index cad3b650..00000000 --- a/Examples/JSON/Lambda.swift +++ /dev/null @@ -1,34 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2021 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import AWSLambdaRuntime - -struct Request: Codable { - let body: String -} - -struct Response: Codable { - let body: String -} - -// in this example we are receiving and responding with codables. Request and Response above are examples of how to use -// codables to model your request and response objects - -@main -struct MyLambda: SimpleLambdaHandler { - func handle(_ event: Request, context: LambdaContext) async throws -> Response { - // as an example, respond with the input event's reversed body - Response(body: String(event.body.reversed())) - } -} diff --git a/Examples/JSON/Package.swift b/Examples/JSON/Package.swift deleted file mode 100644 index 5ae207a8..00000000 --- a/Examples/JSON/Package.swift +++ /dev/null @@ -1,34 +0,0 @@ -// swift-tools-version:5.7 - -import PackageDescription - -import class Foundation.ProcessInfo // needed for CI to test the local version of the library - -let package = Package( - name: "swift-aws-lambda-runtime-example", - platforms: [ - .macOS(.v12) - ], - products: [ - .executable(name: "MyLambda", targets: ["MyLambda"]) - ], - dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha") - ], - targets: [ - .executableTarget( - name: "MyLambda", - dependencies: [ - .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") - ], - path: "." - ) - ] -) - -// for CI to test the local version of the library -if ProcessInfo.processInfo.environment["LAMBDA_USE_LOCAL_DEPS"] != nil { - package.dependencies = [ - .package(name: "swift-aws-lambda-runtime", path: "../..") - ] -} diff --git a/Examples/LocalDebugging/Example.xcworkspace/contents.xcworkspacedata b/Examples/LocalDebugging/Example.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index e42d285c..00000000 --- a/Examples/LocalDebugging/Example.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - diff --git a/Examples/LocalDebugging/Example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Examples/LocalDebugging/Example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d98100..00000000 --- a/Examples/LocalDebugging/Example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/Examples/LocalDebugging/Example.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/Examples/LocalDebugging/Example.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index f9b0d7c5..00000000 --- a/Examples/LocalDebugging/Example.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - PreviewsEnabled - - - diff --git a/Examples/LocalDebugging/MyApp/MyApp.xcodeproj/project.pbxproj b/Examples/LocalDebugging/MyApp/MyApp.xcodeproj/project.pbxproj deleted file mode 100644 index 0ac2539a..00000000 --- a/Examples/LocalDebugging/MyApp/MyApp.xcodeproj/project.pbxproj +++ /dev/null @@ -1,366 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 55; - objects = { - -/* Begin PBXBuildFile section */ - 7CD1174B26FE468F007DD17A /* MyApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CD1174A26FE468F007DD17A /* MyApp.swift */; }; - 7CD1174D26FE468F007DD17A /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CD1174C26FE468F007DD17A /* ContentView.swift */; }; - 7CD1174F26FE4692007DD17A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7CD1174E26FE4692007DD17A /* Assets.xcassets */; }; - 7CD1175226FE4692007DD17A /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7CD1175126FE4692007DD17A /* Preview Assets.xcassets */; }; - 7CD1175A26FE4F44007DD17A /* Shared in Frameworks */ = {isa = PBXBuildFile; productRef = 7CD1175926FE4F44007DD17A /* Shared */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 7CD1174726FE468F007DD17A /* MyApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MyApp.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 7CD1174A26FE468F007DD17A /* MyApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyApp.swift; sourceTree = ""; }; - 7CD1174C26FE468F007DD17A /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; - 7CD1174E26FE4692007DD17A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 7CD1175126FE4692007DD17A /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 7CD1174426FE468F007DD17A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 7CD1175A26FE4F44007DD17A /* Shared in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 7CD1173E26FE468F007DD17A = { - isa = PBXGroup; - children = ( - 7CD1174926FE468F007DD17A /* MyApp */, - 7CD1174826FE468F007DD17A /* Products */, - 7CD1175826FE4F44007DD17A /* Frameworks */, - ); - sourceTree = ""; - }; - 7CD1174826FE468F007DD17A /* Products */ = { - isa = PBXGroup; - children = ( - 7CD1174726FE468F007DD17A /* MyApp.app */, - ); - name = Products; - sourceTree = ""; - }; - 7CD1174926FE468F007DD17A /* MyApp */ = { - isa = PBXGroup; - children = ( - 7CD1174A26FE468F007DD17A /* MyApp.swift */, - 7CD1174C26FE468F007DD17A /* ContentView.swift */, - 7CD1174E26FE4692007DD17A /* Assets.xcassets */, - 7CD1175026FE4692007DD17A /* Preview Content */, - ); - path = MyApp; - sourceTree = ""; - }; - 7CD1175026FE4692007DD17A /* Preview Content */ = { - isa = PBXGroup; - children = ( - 7CD1175126FE4692007DD17A /* Preview Assets.xcassets */, - ); - path = "Preview Content"; - sourceTree = ""; - }; - 7CD1175826FE4F44007DD17A /* Frameworks */ = { - isa = PBXGroup; - children = ( - ); - name = Frameworks; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 7CD1174626FE468F007DD17A /* MyApp */ = { - isa = PBXNativeTarget; - buildConfigurationList = 7CD1175526FE4692007DD17A /* Build configuration list for PBXNativeTarget "MyApp" */; - buildPhases = ( - 7CD1174326FE468F007DD17A /* Sources */, - 7CD1174426FE468F007DD17A /* Frameworks */, - 7CD1174526FE468F007DD17A /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = MyApp; - packageProductDependencies = ( - 7CD1175926FE4F44007DD17A /* Shared */, - ); - productName = MyApp; - productReference = 7CD1174726FE468F007DD17A /* MyApp.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 7CD1173F26FE468F007DD17A /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastSwiftUpdateCheck = 1300; - LastUpgradeCheck = 1300; - TargetAttributes = { - 7CD1174626FE468F007DD17A = { - CreatedOnToolsVersion = 13.0; - }; - }; - }; - buildConfigurationList = 7CD1174226FE468F007DD17A /* Build configuration list for PBXProject "MyApp" */; - compatibilityVersion = "Xcode 13.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 7CD1173E26FE468F007DD17A; - productRefGroup = 7CD1174826FE468F007DD17A /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 7CD1174626FE468F007DD17A /* MyApp */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 7CD1174526FE468F007DD17A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 7CD1175226FE4692007DD17A /* Preview Assets.xcassets in Resources */, - 7CD1174F26FE4692007DD17A /* Assets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 7CD1174326FE468F007DD17A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 7CD1174D26FE468F007DD17A /* ContentView.swift in Sources */, - 7CD1174B26FE468F007DD17A /* MyApp.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 7CD1175326FE4692007DD17A /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 7CD1175426FE4692007DD17A /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 7CD1175626FE4692007DD17A /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"MyApp/Preview Content\""; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.apple.swift.MyApp; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 7CD1175726FE4692007DD17A /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_ASSET_PATHS = "\"MyApp/Preview Content\""; - ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; - INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.apple.swift.MyApp; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 7CD1174226FE468F007DD17A /* Build configuration list for PBXProject "MyApp" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7CD1175326FE4692007DD17A /* Debug */, - 7CD1175426FE4692007DD17A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 7CD1175526FE4692007DD17A /* Build configuration list for PBXNativeTarget "MyApp" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7CD1175626FE4692007DD17A /* Debug */, - 7CD1175726FE4692007DD17A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - -/* Begin XCSwiftPackageProductDependency section */ - 7CD1175926FE4F44007DD17A /* Shared */ = { - isa = XCSwiftPackageProductDependency; - productName = Shared; - }; -/* End XCSwiftPackageProductDependency section */ - }; - rootObject = 7CD1173F26FE468F007DD17A /* Project object */; -} diff --git a/Examples/LocalDebugging/MyApp/MyApp/Assets.xcassets/AppIcon.appiconset/Contents.json b/Examples/LocalDebugging/MyApp/MyApp/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 9221b9bb..00000000 --- a/Examples/LocalDebugging/MyApp/MyApp/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "20x20" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "20x20" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "29x29" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "29x29" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "40x40" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "40x40" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "60x60" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "60x60" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "20x20" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "20x20" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "29x29" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "29x29" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "40x40" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "40x40" - }, - { - "idiom" : "ipad", - "scale" : "1x", - "size" : "76x76" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "76x76" - }, - { - "idiom" : "ipad", - "scale" : "2x", - "size" : "83.5x83.5" - }, - { - "idiom" : "ios-marketing", - "scale" : "1x", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Examples/LocalDebugging/MyApp/MyApp/Assets.xcassets/Contents.json b/Examples/LocalDebugging/MyApp/MyApp/Assets.xcassets/Contents.json deleted file mode 100644 index 73c00596..00000000 --- a/Examples/LocalDebugging/MyApp/MyApp/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Examples/LocalDebugging/MyApp/MyApp/ContentView.swift b/Examples/LocalDebugging/MyApp/MyApp/ContentView.swift deleted file mode 100644 index 46f9d5a7..00000000 --- a/Examples/LocalDebugging/MyApp/MyApp/ContentView.swift +++ /dev/null @@ -1,95 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2020-2021 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import Shared -import SwiftUI - -struct ContentView: View { - @State var name: String = "" - @State var password: String = "" - @State var response: String = "" - @State private var isLoading: Bool = false - - var body: some View { - VStack(alignment: .leading, spacing: 20) { - TextField("Username", text: self.$name) - SecureField("Password", text: self.$password) - let inputIncomplete = self.name.isEmpty || self.password.isEmpty - Button { - Task { - self.isLoading = true - do { - self.response = try await self.register() - } catch { - self.response = error.localizedDescription - } - self.isLoading = false - } - } label: { - Text("Register") - .padding() - .foregroundColor(.white) - .background(.black) - .border(.black, width: 2) - .opacity(self.isLoading ? 0 : 1) - .overlay { - if self.isLoading { - ProgressView() - } - } - } - .disabled(inputIncomplete || self.isLoading) - .opacity(inputIncomplete ? 0.5 : 1) - Text(self.response) - }.padding(100) - } - - func register() async throws -> String { - guard let url = URL(string: "http://127.0.0.1:7000/invoke") else { - fatalError("invalid url") - } - var request = URLRequest(url: url) - request.httpMethod = "POST" - - guard let jsonRequest = try? JSONEncoder().encode(Request(name: self.name, password: self.password)) else { - fatalError("encoding error") - } - request.httpBody = jsonRequest - - let (data, response) = try await URLSession.shared.data(for: request) - - guard let httpResponse = response as? HTTPURLResponse else { - throw CommunicationError(reason: "Invalid response, expected HTTPURLResponse.") - } - guard httpResponse.statusCode == 200 else { - throw CommunicationError(reason: "Invalid response code: \(httpResponse.statusCode)") - } - - let jsonResponse = try JSONDecoder().decode(Response.self, from: data) - return jsonResponse.message - } -} - -struct ContentView_Previews: PreviewProvider { - static var previews: some View { - ContentView() - } -} - -struct CommunicationError: LocalizedError { - let reason: String - var errorDescription: String? { - self.reason - } -} diff --git a/Examples/LocalDebugging/MyApp/MyApp/MyApp.swift b/Examples/LocalDebugging/MyApp/MyApp/MyApp.swift deleted file mode 100644 index 8b4ae638..00000000 --- a/Examples/LocalDebugging/MyApp/MyApp/MyApp.swift +++ /dev/null @@ -1,24 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2021 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import SwiftUI - -@main -struct MyApp: App { - var body: some Scene { - WindowGroup { - ContentView() - } - } -} diff --git a/Examples/LocalDebugging/MyApp/MyApp/Preview Content/Preview Assets.xcassets/Contents.json b/Examples/LocalDebugging/MyApp/MyApp/Preview Content/Preview Assets.xcassets/Contents.json deleted file mode 100644 index 73c00596..00000000 --- a/Examples/LocalDebugging/MyApp/MyApp/Preview Content/Preview Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/Examples/LocalDebugging/MyLambda/.dockerignore b/Examples/LocalDebugging/MyLambda/.dockerignore deleted file mode 100644 index 24e5b0a1..00000000 --- a/Examples/LocalDebugging/MyLambda/.dockerignore +++ /dev/null @@ -1 +0,0 @@ -.build diff --git a/Examples/LocalDebugging/MyLambda/Dockerfile b/Examples/LocalDebugging/MyLambda/Dockerfile deleted file mode 100644 index 32962859..00000000 --- a/Examples/LocalDebugging/MyLambda/Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -FROM swift:5.5-amazonlinux2 - -RUN yum -y install zip diff --git a/Examples/LocalDebugging/MyLambda/Lambda.swift b/Examples/LocalDebugging/MyLambda/Lambda.swift deleted file mode 100644 index 397ece30..00000000 --- a/Examples/LocalDebugging/MyLambda/Lambda.swift +++ /dev/null @@ -1,27 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2020-2021 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import AWSLambdaRuntime -import Shared - -// set LOCAL_LAMBDA_SERVER_ENABLED env variable to "true" to start -// a local server simulator which will allow local debugging - -@main -struct MyLambda: SimpleLambdaHandler { - func handle(_ request: Request, context: LambdaContext) async throws -> Response { - // TODO: something useful - Response(message: "Hello, \(request.name)!") - } -} diff --git a/Examples/LocalDebugging/MyLambda/Package.swift b/Examples/LocalDebugging/MyLambda/Package.swift deleted file mode 100644 index facef277..00000000 --- a/Examples/LocalDebugging/MyLambda/Package.swift +++ /dev/null @@ -1,38 +0,0 @@ -// swift-tools-version:5.7 - -import PackageDescription - -import class Foundation.ProcessInfo // needed for CI to test the local version of the library - -let package = Package( - name: "MyLambda", - platforms: [ - .macOS(.v12) - ], - products: [ - .executable(name: "MyLambda", targets: ["MyLambda"]) - ], - dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha"), - .package(name: "Shared", path: "../Shared"), - ], - targets: [ - .executableTarget( - name: "MyLambda", - dependencies: [ - .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), - .product(name: "Shared", package: "Shared"), - ], - path: ".", - exclude: ["scripts/", "Dockerfile"] - ) - ] -) - -// for CI to test the local version of the library -if ProcessInfo.processInfo.environment["LAMBDA_USE_LOCAL_DEPS"] != nil { - package.dependencies = [ - .package(name: "swift-aws-lambda-runtime", path: "../../.."), - .package(name: "Shared", path: "../Shared"), - ] -} diff --git a/Examples/LocalDebugging/MyLambda/scripts/deploy.sh b/Examples/LocalDebugging/MyLambda/scripts/deploy.sh deleted file mode 100755 index 75be0ceb..00000000 --- a/Examples/LocalDebugging/MyLambda/scripts/deploy.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash -##===----------------------------------------------------------------------===## -## -## This source file is part of the SwiftAWSLambdaRuntime open source project -## -## Copyright (c) 2020 Apple Inc. and the SwiftAWSLambdaRuntime project authors -## Licensed under Apache License v2.0 -## -## See LICENSE.txt for license information -## See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -## -## SPDX-License-Identifier: Apache-2.0 -## -##===----------------------------------------------------------------------===## - -set -eu - -executable=MyLambda -lambda_name=SwiftSample -s3_bucket=swift-lambda-test - -echo -e "\ndeploying $executable" - -echo "-------------------------------------------------------------------------" -echo "preparing docker build image" -echo "-------------------------------------------------------------------------" -docker build . -t builder -echo "done" - -echo "-------------------------------------------------------------------------" -echo "building \"$executable\" lambda" -echo "-------------------------------------------------------------------------" -docker run --rm -v `pwd`/../../..:/workspace -w /workspace/Examples/LocalDebugging/MyLambda builder \ - bash -cl "swift build --product $executable -c release" -echo "done" - -echo "-------------------------------------------------------------------------" -echo "packaging \"$executable\" lambda" -echo "-------------------------------------------------------------------------" -docker run --rm -v `pwd`:/workspace -w /workspace builder \ - bash -cl "./scripts/package.sh $executable" -echo "done" - -echo "-------------------------------------------------------------------------" -echo "uploading \"$executable\" lambda to s3" -echo "-------------------------------------------------------------------------" - -aws s3 cp .build/lambda/$executable/lambda.zip s3://$s3_bucket/ - -echo "-------------------------------------------------------------------------" -echo "updating \"$lambda_name\" to latest \"$executable\"" -echo "-------------------------------------------------------------------------" -aws lambda update-function-code --function $lambda_name --s3-bucket $s3_bucket --s3-key lambda.zip diff --git a/Examples/LocalDebugging/MyLambda/scripts/package.sh b/Examples/LocalDebugging/MyLambda/scripts/package.sh deleted file mode 100755 index 17d5853b..00000000 --- a/Examples/LocalDebugging/MyLambda/scripts/package.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -##===----------------------------------------------------------------------===## -## -## This source file is part of the SwiftAWSLambdaRuntime open source project -## -## Copyright (c) 2020 Apple Inc. and the SwiftAWSLambdaRuntime project authors -## Licensed under Apache License v2.0 -## -## See LICENSE.txt for license information -## See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -## -## SPDX-License-Identifier: Apache-2.0 -## -##===----------------------------------------------------------------------===## - -set -eu - -executable=$1 - -target=".build/lambda/$executable" -rm -rf "$target" -mkdir -p "$target" -cp ".build/release/$executable" "$target/" -# add the target deps based on ldd -ldd ".build/release/$executable" | grep swift | awk '{print $3}' | xargs cp -Lv -t "$target" -cd "$target" -ln -s "$executable" "bootstrap" -zip --symlinks lambda.zip * diff --git a/Examples/LocalDebugging/README.md b/Examples/LocalDebugging/README.md deleted file mode 100644 index 25ee92ba..00000000 --- a/Examples/LocalDebugging/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# Local Debugging Example - -This sample project demonstrates how to write a simple Lambda function in Swift, -and how to use local debugging techniques that simulate how the Lambda function -would be invoked by the AWS Lambda Runtime engine. - -The example includes an Xcode workspace with three modules: - -1. [MyApp](MyApp) is a SwiftUI iOS application that calls the Lambda function. -2. [MyLambda](MyLambda) is a SwiftPM executable package for the Lambda function. -3. [Shared](Shared) is a SwiftPM library package used for shared code between the iOS application and the Lambda function, -such as the Request and Response model objects. - -The local debugging experience is achieved by running the Lambda function in the context of the -debug-only local lambda engine simulator which starts a local HTTP server enabling the communication -between the iOS application and the Lambda function over HTTP. - -To try out this example, open the workspace in Xcode and "run" the two targets, -using the relevant `MyLambda` and `MyApp` Xcode schemes. - -Start with running the `MyLambda` target. -* Switch to the `MyLambda` scheme and select the "My Mac" destination -* Set the `LOCAL_LAMBDA_SERVER_ENABLED` environment variable to `true` by editing the `MyLambda` scheme Run/Arguments options. -* Hit `Run` -* Once it is up you should see a log message in the Xcode console saying -`LocalLambdaServer started and listening on 127.0.0.1:7000, receiving events on /invoke` -which means the local emulator is up and receiving traffic on port `7000` and expecting events on the `/invoke` endpoint. - -Continue to run the `MyApp` target -* Switch to the `MyApp` scheme and select a simulator destination. -* Hit `Run` -* Once up, the application's UI should appear in the simulator allowing you -to interact with it. - -Once both targets are running, set up breakpoints in the iOS application or Lambda function to observe the system behavior. diff --git a/Examples/LocalDebugging/Shared/Package.swift b/Examples/LocalDebugging/Shared/Package.swift deleted file mode 100644 index 12d5eb9f..00000000 --- a/Examples/LocalDebugging/Shared/Package.swift +++ /dev/null @@ -1,21 +0,0 @@ -// swift-tools-version:5.5 -// The swift-tools-version declares the minimum version of Swift required to build this package. - -import PackageDescription - -let package = Package( - name: "Shared", - products: [ - .library(name: "Shared", targets: ["Shared"]) - ], - dependencies: [], - targets: [ - .target( - name: "Shared", - dependencies: [], - resources: [ - .process("Resources") - ] - ) - ] -) diff --git a/Examples/LocalDebugging/Shared/Sources/Shared/Resources/test.json b/Examples/LocalDebugging/Shared/Sources/Shared/Resources/test.json deleted file mode 100644 index 0967ef42..00000000 --- a/Examples/LocalDebugging/Shared/Sources/Shared/Resources/test.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/Examples/LocalDebugging/Shared/Sources/Shared/Shared.swift b/Examples/LocalDebugging/Shared/Sources/Shared/Shared.swift deleted file mode 100644 index 8189eac3..00000000 --- a/Examples/LocalDebugging/Shared/Sources/Shared/Shared.swift +++ /dev/null @@ -1,35 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2020 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -public struct Request: Codable, CustomStringConvertible { - public let name: String - public let password: String - - public init(name: String, password: String) { - self.name = name - self.password = password - } - - public var description: String { - "name: \(self.name), password: ***" - } -} - -public struct Response: Codable { - public let message: String - - public init(message: String) { - self.message = message - } -} diff --git a/Examples/ResourcePackaging/Lambda.swift b/Examples/ResourcePackaging/Lambda.swift deleted file mode 100644 index 5e71a688..00000000 --- a/Examples/ResourcePackaging/Lambda.swift +++ /dev/null @@ -1,28 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2021 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import AWSLambdaRuntime -import Foundation - -// in this example we are reading from a bundled resource and responding with the contents - -@main -struct MyLambda: SimpleLambdaHandler { - func handle(_ input: String, context: LambdaContext) async throws -> String { - guard let fileURL = Bundle.module.url(forResource: "hello", withExtension: "txt") else { - fatalError("no file url") - } - return try String(contentsOf: fileURL) - } -} diff --git a/Examples/ResourcePackaging/Package.swift b/Examples/ResourcePackaging/Package.swift deleted file mode 100644 index b2af8c02..00000000 --- a/Examples/ResourcePackaging/Package.swift +++ /dev/null @@ -1,37 +0,0 @@ -// swift-tools-version:5.7 - -import PackageDescription - -import class Foundation.ProcessInfo // needed for CI to test the local version of the library - -let package = Package( - name: "swift-aws-lambda-runtime-example", - platforms: [ - .macOS(.v12) - ], - products: [ - .executable(name: "MyLambda", targets: ["MyLambda"]) - ], - dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha") - ], - targets: [ - .executableTarget( - name: "MyLambda", - dependencies: [ - .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") - ], - path: ".", - resources: [ - .process("hello.txt") - ] - ) - ] -) - -// for CI to test the local version of the library -if ProcessInfo.processInfo.environment["LAMBDA_USE_LOCAL_DEPS"] != nil { - package.dependencies = [ - .package(name: "swift-aws-lambda-runtime", path: "../..") - ] -} diff --git a/Examples/ResourcePackaging/hello.txt b/Examples/ResourcePackaging/hello.txt deleted file mode 100644 index b45ef6fe..00000000 --- a/Examples/ResourcePackaging/hello.txt +++ /dev/null @@ -1 +0,0 @@ -Hello, World! \ No newline at end of file diff --git a/Examples/Testing/Package.swift b/Examples/Testing/Package.swift deleted file mode 100644 index 587c9279..00000000 --- a/Examples/Testing/Package.swift +++ /dev/null @@ -1,36 +0,0 @@ -// swift-tools-version:5.7 - -import PackageDescription - -import class Foundation.ProcessInfo // needed for CI to test the local version of the library - -let package = Package( - name: "swift-aws-lambda-runtime-example", - platforms: [ - .macOS(.v12) - ], - products: [ - .executable(name: "MyLambda", targets: ["MyLambda"]) - ], - dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha") - ], - targets: [ - .executableTarget( - name: "MyLambda", - dependencies: [ - .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), - .product(name: "AWSLambdaTesting", package: "swift-aws-lambda-runtime"), - ], - path: "Sources" - ), - .testTarget(name: "MyLambdaTests", dependencies: ["MyLambda"], path: "Tests"), - ] -) - -// for CI to test the local version of the library -if ProcessInfo.processInfo.environment["LAMBDA_USE_LOCAL_DEPS"] != nil { - package.dependencies = [ - .package(name: "swift-aws-lambda-runtime", path: "../..") - ] -} diff --git a/Examples/Testing/Sources/Lambda.swift b/Examples/Testing/Sources/Lambda.swift deleted file mode 100644 index 568710e4..00000000 --- a/Examples/Testing/Sources/Lambda.swift +++ /dev/null @@ -1,25 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2021 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import AWSLambdaRuntime - -// in this example we are receiving and responding with strings - -@main -struct MyLambda: SimpleLambdaHandler { - func handle(_ event: String, context: LambdaContext) async throws -> String { - // as an example, respond with the event's reversed body - String(event.reversed()) - } -} diff --git a/Examples/Testing/Tests/LambdaTests.swift b/Examples/Testing/Tests/LambdaTests.swift deleted file mode 100644 index cce0ad34..00000000 --- a/Examples/Testing/Tests/LambdaTests.swift +++ /dev/null @@ -1,27 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the SwiftAWSLambdaRuntime open source project -// -// Copyright (c) 2021 Apple Inc. and the SwiftAWSLambdaRuntime project authors -// Licensed under Apache License v2.0 -// -// See LICENSE.txt for license information -// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -// -// SPDX-License-Identifier: Apache-2.0 -// -//===----------------------------------------------------------------------===// - -import AWSLambdaRuntime -import AWSLambdaTesting -import XCTest - -@testable import MyLambda - -class LambdaTest: XCTestCase { - func testIt() async throws { - let input = UUID().uuidString - let result = try await Lambda.test(MyLambda.self, with: input) - XCTAssertEqual(result, String(input.reversed())) - } -} From d083ec39f09e79725337974e5ba8c5efaac62176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Tue, 8 Oct 2024 05:20:28 -0400 Subject: [PATCH 041/177] add v2 readme (wip) and archive readme v1 (#381) * add v2 readme (wip) and delete readme v1 --- readme.md | 979 ++++++------------------------------------------------ 1 file changed, 101 insertions(+), 878 deletions(-) diff --git a/readme.md b/readme.md index 4d3b466c..fd68681c 100644 --- a/readme.md +++ b/readme.md @@ -1,942 +1,165 @@ -# Swift AWS Lambda Runtime +> [!IMPORTANT] +> The documentation included here refers to the Swift AWS Lambda Runtime v2 (code from the main branch). If you're developing for the runtime v1.x, check this [readme](https://github.com/swift-server/swift-aws-lambda-runtime/blob/v1/readme.md) instead. -Many modern systems have client components like iOS, macOS or watchOS applications as well as server components that those clients interact with. Serverless functions are often the easiest and most efficient way for client application developers to extend their applications into the cloud. +> [!WARNING] +> The Swift AWS Runtime v2 is work in progress. We will add more documentation and code examples over time. -Serverless functions are increasingly becoming a popular choice for running event-driven or otherwise ad-hoc compute tasks in the cloud. They power mission critical microservices and data intensive workloads. In many cases, serverless functions allow developers to more easily scale and control compute costs given their on-demand nature. +## Pre-requisites -When using serverless functions, attention must be given to resource utilization as it directly impacts the costs of the system. This is where Swift shines! With its low memory footprint, deterministic performance, and quick start time, Swift is a fantastic match for the serverless functions architecture. - -Combine this with Swift's developer friendliness, expressiveness, and emphasis on safety, and we have a solution that is great for developers at all skill levels, scalable, and cost effective. +- Ensure you have the Swift 6.x toolchain installed. You can [install Swift toolchains](https://www.swift.org/install/macos/) from Swift.org -Swift AWS Lambda Runtime was designed to make building Lambda functions in Swift simple and safe. The library is an implementation of the [AWS Lambda Runtime API](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html) and uses an embedded asynchronous HTTP Client based on [SwiftNIO](http://github.com/apple/swift-nio) that is fine-tuned for performance in the AWS Runtime context. The library provides a multi-tier API that allows building a range of Lambda functions: From quick and simple closures to complex, performance-sensitive event handlers. +- When developing on macOS, be sure you use macOS 15 (Sequoia) or a more recent macOS version. -## Getting started - -If you have never used AWS Lambda or Docker before, check out this [getting started guide](https://fabianfett.dev/getting-started-with-swift-aws-lambda-runtime) which helps you with every step from zero to a running Lambda. - -First, create a SwiftPM project and pull Swift AWS Lambda Runtime as dependency into your project - - ```swift - // swift-tools-version:5.7 - - import PackageDescription - - let package = Package( - name: "MyLambda", - products: [ - .executable(name: "MyLambda", targets: ["MyLambda"]), - ], - dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha"), - ], - targets: [ - .executableTarget(name: "MyLambda", dependencies: [ - .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), - ]), - ] - ) - ``` - -Next, create a `MyLambda.swift` and implement your Lambda. Note that the file can not be named `main.swift` or you will encounter the following error: `'main' attribute cannot be used in a module that contains top-level code`. - -### Using async function - - The simplest way to use `AWSLambdaRuntime` is to use the `SimpleLambdaHandler` protocol and pass in an async function, for example: - - ```swift - // Import the module - import AWSLambdaRuntime - - @main - struct MyLambda: SimpleLambdaHandler { - // in this example we are receiving and responding with strings - func handle(_ name: String, context: LambdaContext) async throws -> String { - "Hello, \(name)" - } - } - ``` - - More commonly, the event would be a JSON, which is modeled using `Codable`, for example: - - ```swift - // Import the module - import AWSLambdaRuntime - - // Request, uses Codable for transparent JSON encoding - struct Request: Codable { - let name: String - } - - // Response, uses Codable for transparent JSON encoding - struct Response: Codable { - let message: String - } - - @main - struct MyLambda: SimpleLambdaHandler { - // In this example we are receiving and responding with `Codable`. - func handle(_ request: Request, context: LambdaContext) async throws -> Response { - Response(message: "Hello, \(request.name)") - } - } - ``` - - Since most Lambda functions are triggered by events originating in the AWS platform like `SNS`, `SQS` or `APIGateway`, the [Swift AWS Lambda Events](http://github.com/swift-server/swift-aws-lambda-events) package includes an `AWSLambdaEvents` module that provides implementations for most common AWS event types further simplifying writing Lambda functions. For example, handling a `SQS` message: - - First, add a dependency on the event packages: - - ```swift - // swift-tools-version:5.7 - - import PackageDescription - - let package = Package( - name: "MyLambda", - products: [ - .executable(name: "MyLambda", targets: ["MyLambda"]), - ], - dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha"), - .package(url: "https://github.com/swift-server/swift-aws-lambda-events.git", branch: "main"), - ], - targets: [ - .executableTarget(name: "MyLambda", dependencies: [ - .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), - .product(name: "AWSLambdaEvents", package: "swift-aws-lambda-events"), - ]), - ] - ) - ``` - - Then in your Lambda: - - ```swift - // Import the modules - import AWSLambdaRuntime - import AWSLambdaEvents - - @main - struct MyLambda: SimpleLambdaHandler { - // In this example we are receiving a SQS Event, with no response (Void). - func handle(_ event: SQSEvent, context: LambdaContext) async throws { - ... - } - } - ``` - - In some cases, the Lambda needs to do work on initialization. - In such cases, use the `LambdaHandler` instead of the `SimpleLambdaHandler` which has an additional initialization method. For example: - - ```swift - import AWSLambdaRuntime - - @main - struct MyLambda: LambdaHandler { - init(context: LambdaInitializationContext) async throws { - ... - } - - func handle(_ event: String, context: LambdaContext) async throws -> Void { - ... - } - } - ``` - - Modeling Lambda functions as async functions is both simple and safe. Swift AWS Lambda Runtime will ensure that the user-provided code is offloaded from the network processing thread such that even if the code becomes slow to respond or gets stuck, the underlying process can continue to function. This safety comes at a small performance penalty from context switching between threads. In many cases, the simplicity and safety of using the Closure based API is often preferred over the complexity of the performance-oriented API. - -### Using EventLoopLambdaHandler - - Performance sensitive Lambda functions may choose to use a more complex API which allows user code to run on the same thread as the networking handlers. Swift AWS Lambda Runtime uses [SwiftNIO](https://github.com/apple/swift-nio) as its underlying networking engine which means the APIs are based on [SwiftNIO](https://github.com/apple/swift-nio) concurrency primitives like the `EventLoop` and `EventLoopFuture`. For example: - - ```swift - // Import the modules - import AWSLambdaRuntime - import AWSLambdaEvents - import NIOCore - - @main - struct Handler: EventLoopLambdaHandler { - typealias Event = SNSEvent.Message // Event / Request type - typealias Output = Void // Output / Response type - - static func makeHandler(context: LambdaInitializationContext) -> EventLoopFuture { - context.eventLoop.makeSucceededFuture(Self()) - } - - // `EventLoopLambdaHandler` does not offload the Lambda processing to a separate thread - // while the closure-based handlers do. - func handle(_ event: Event, context: LambdaContext) -> EventLoopFuture { - ... - context.eventLoop.makeSucceededFuture(Void()) - } - } - ``` - - Beyond the small cognitive complexity of using the `EventLoopFuture` based APIs, note these APIs should be used with extra care. An `EventLoopLambdaHandler` will execute the user code on the same `EventLoop` (thread) as the library, making processing faster but requiring the user code to never call blocking APIs as it might prevent the underlying process from functioning. - -## Testing Locally - -Before deploying your code to AWS Lambda, you can test it locally by setting the `LOCAL_LAMBDA_SERVER_ENABLED` environment variable to true. It will look like this on CLI: - -```sh -LOCAL_LAMBDA_SERVER_ENABLED=true swift run -``` +- To build and archive your Lambda function, you need to [install docker](https://docs.docker.com/desktop/install/mac-install/). -This starts a local HTTP server listening on port 7000. You can invoke your local Lambda function by sending an HTTP POST request to `http://127.0.0.1:7000/invoke`. - -The request must include the JSON payload expected as an `Event` by your function. You can create a text file with the JSON payload documented by AWS or captured from a trace. In this example, we used [the APIGatewayv2 JSON payload from the documentation](https://docs.aws.amazon.com/lambda/latest/dg/services-apigateway.html#apigateway-example-event), saved as `events/create-session.json` text file. - -Then we use curl to invoke the local endpoint with the test JSON payload. - -```sh -curl -v --header "Content-Type:\ application/json" --data @events/create-session.json http://127.0.0.1:7000/invoke -* Trying 127.0.0.1:7000... -* Connected to 127.0.0.1 (127.0.0.1) port 7000 -> POST /invoke HTTP/1.1 -> Host: 127.0.0.1:7000 -> User-Agent: curl/8.4.0 -> Accept: */* -> Content-Type:\ application/json -> Content-Length: 1160 -> -< HTTP/1.1 200 OK -< content-length: 247 -< -* Connection #0 to host 127.0.0.1 left intact -{"statusCode":200,"isBase64Encoded":false,"body":"...","headers":{"Access-Control-Allow-Origin":"*","Content-Type":"application\/json; charset=utf-8","Access-Control-Allow-Headers":"*"}} -``` -### Modifying the local endpoint +- To deploy the Lambda function and invoke it, you must have [an AWS account](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-creating.html) and [install and configure the `aws` command line](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). -By default, when using the local Lambda server, it listens on the `/invoke` endpoint. +- Some examples are using [AWS SAM](https://aws.amazon.com/serverless/sam/). Install the [SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html) before deploying these examples. -Some testing tools, such as the [AWS Lambda runtime interface emulator](https://docs.aws.amazon.com/lambda/latest/dg/images-test.html), require a different endpoint. In that case, you can use the `LOCAL_LAMBDA_SERVER_INVOCATION_ENDPOINT` environment variable to force the runtime to listen on a different endpoint. +## TL;DR -Example: +1. Create a new Swift executable project -```sh -LOCAL_LAMBDA_SERVER_ENABLED=true LOCAL_LAMBDA_SERVER_INVOCATION_ENDPOINT=/2015-03-31/functions/function/invocations swift run +```bash +mkdir MyLambda && cd MyLambda +swift package init --type executable ``` -## Increase logging verbosity - -You can increase the verbosity of the runtime using the `LOG_LEVEL` environment variable. - -- `LOG_LEVEL=debug` displays information about the Swift AWS Lambda Runtime activity and lifecycle -- `LOG_LEVEL=trace` displays a string representation of the input event as received from the AWS Lambda service (before invoking your handler). +2. Prepare your `Package.swift` file -You can modify the verbosity of a Lambda function by passing the LOG_LEVEL environment variable both during your local testing (LOG_LEVEL=trace LOCAL_LAMBDA_SERVER_ENABLED=true swift run) or when you deploy your code on AWS Lambda. -You can [define environment variables for your Lambda functions](https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html) in the AWS console or programmatically. + 2.1 Add the Swift AWS Lambda Runtime as a dependency -This repository follows [Swift's Log Level Guidelines](https://www.swift.org/server/guides/libraries/log-levels.html). At `LOG_LEVEL=trace`, the AWS Lambda runtime will display a string representation of the input event as received from the AWS Lambda service before invoking your handler, for maximum debuggability. + ```bash + swift package add-dependency https://github.com/swift-server/swift-aws-lambda-runtime.git --branch main + swift package add-target-dependency AWSLambdaRuntime MyLambda --package swift-aws-lambda-runtime + ``` -## Deploying to AWS Lambda - -To deploy Lambda functions to AWS Lambda, you need to compile the code for Amazon Linux which is the OS used on AWS Lambda microVMs, package it as a Zip file, and upload to AWS. - -Swift AWS Lambda Runtime includes a SwiftPM plugin designed to help with the creation of the zip archive. -To build and package your Lambda, run the following command: - - ```shell - swift package archive - ``` - -The `archive` command can be customized using the following parameters - -* `--output-path` A valid file system path where a folder with the archive operation result will be placed. This folder will contain the following elements: - * A file link named `bootstrap` - * An executable file - * A **Zip** file ready to be uploaded to AWS -* `--verbose` A number that sets the command output detail level between the following values: - * `0` (Silent) - * `1` (Output) - * `2` (Debug) -* `--swift-version` Swift language version used to define the Amazon Linux 2 Docker image. For example "5.7.3" -* `--base-docker-image` An Amazon Linux 2 docker image name available in your system. -* `--disable-docker-image-update` If flag is set, docker image will not be updated and local image will be used. - -Both `--swift-version` and `--base-docker-image` are mutually exclusive - -Here's an example - -```zsh -swift package archive --output-path /Users/JohnAppleseed/Desktop --verbose 2 -``` + 2.2 (Optional - only on macOS) Add `platforms` after `name` -This command execution will generate a folder at `/Users/JohnAppleseed/Desktop` with the lambda zipped and ready to upload it and set the command detail output level to `2` (debug) + ``` + platforms: [.macOS(.v15)], + ``` - on macOS, the archiving plugin uses docker to build the Lambda for Amazon Linux 2, and as such requires to communicate with Docker over the localhost network. - At the moment, SwiftPM does not allow plugin communication over network, and as such the invocation requires breaking from the SwiftPM plugin sandbox. This limitation would be removed in the future. - - + 2.3 Your `Package.swift` file must look like this -```shell - swift package --disable-sandbox archive - ``` + ```swift + // swift-tools-version: 6.0 -AWS offers several tools to interact and deploy Lambda functions to AWS Lambda including [SAM](https://aws.amazon.com/serverless/sam/) and the [AWS CLI](https://aws.amazon.com/cli/). The [Examples Directory](/Examples) includes complete sample build and deployment scripts that utilize these tools. + import PackageDescription -Note the examples mentioned above use dynamic linking, therefore bundle the required Swift libraries in the Zip package along side the executable. You may choose to link the Lambda function statically (using `-static-stdlib`) which could improve performance but requires additional linker flags. + let package = Package( + name: "MyLambda", + platforms: [.macOS(.v15)], + dependencies: [ + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main"), + ], + targets: [ + .executableTarget( + name: "MyLambda", + dependencies: [ + .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), + ] + ), + ] + ) + ``` -To build the Lambda function for Amazon Linux 2, use the Docker image published by Swift.org on [Swift toolchains and Docker images for Amazon Linux 2](https://swift.org/download/), as demonstrated in the examples. - -## Architecture - -The library defines four protocols for the implementation of a Lambda Handler. From low-level to more convenient: - -### ByteBufferLambdaHandler - -An `EventLoopFuture` based processing protocol for a Lambda that takes a `ByteBuffer` and returns a `ByteBuffer?` asynchronously. - -`ByteBufferLambdaHandler` is the lowest level protocol designed to power the higher level `EventLoopLambdaHandler` and `LambdaHandler` based APIs. Users are not expected to use this protocol, though some performance sensitive applications that operate at the `ByteBuffer` level or have special serialization needs may choose to do so. +3. Edit `Sources/main.swift` file and replace the content with this code ```swift -public protocol ByteBufferLambdaHandler { - /// Create a Lambda handler for the runtime. - /// - /// Use this to initialize all your resources that you want to cache between invocations. This could be database - /// connections and HTTP clients for example. It is encouraged to use the given `EventLoop`'s conformance - /// to `EventLoopGroup` when initializing NIO dependencies. This will improve overall performance, as it - /// minimizes thread hopping. - static func makeHandler(context: LambdaInitializationContext) -> EventLoopFuture - - /// The Lambda handling method. - /// Concrete Lambda handlers implement this method to provide the Lambda functionality. - /// - /// - parameters: - /// - context: Runtime ``LambdaContext``. - /// - event: The event or input payload encoded as `ByteBuffer`. - /// - /// - Returns: An `EventLoopFuture` to report the result of the Lambda back to the runtime engine. - /// The `EventLoopFuture` should be completed with either a response encoded as `ByteBuffer` or an `Error`. - func handle(_ buffer: ByteBuffer, context: LambdaContext) -> EventLoopFuture -} -``` - -### EventLoopLambdaHandler - -`EventLoopLambdaHandler` is a strongly typed, `EventLoopFuture` based asynchronous processing protocol for a Lambda that takes a user defined `Event` and returns a user defined `Output`. +import AWSLambdaRuntime -`EventLoopLambdaHandler` provides `ByteBuffer` -> `Event` decoding and `Output` -> `ByteBuffer?` encoding for `Codable` and `String`. +// in this example we are receiving and responding with strings -`EventLoopLambdaHandler` executes the user provided Lambda on the same `EventLoop` as the core runtime engine, making the processing fast but requires more care from the implementation to never block the `EventLoop`. It it designed for performance sensitive applications that use `Codable` or `String` based Lambda functions. - -```swift -public protocol EventLoopLambdaHandler { - /// The lambda functions input. In most cases this should be `Codable`. If your event originates from an - /// AWS service, have a look at [AWSLambdaEvents](https://github.com/swift-server/swift-aws-lambda-events), - /// which provides a number of commonly used AWS Event implementations. - associatedtype Event - /// The lambda functions output. Can be `Void`. - associatedtype Output - - /// Create a Lambda handler for the runtime. - /// - /// Use this to initialize all your resources that you want to cache between invocations. This could be database - /// connections and HTTP clients for example. It is encouraged to use the given `EventLoop`'s conformance - /// to `EventLoopGroup` when initializing NIO dependencies. This will improve overall performance, as it - /// minimizes thread hopping. - static func makeHandler(context: LambdaInitializationContext) -> EventLoopFuture - - /// The Lambda handling method. - /// Concrete Lambda handlers implement this method to provide the Lambda functionality. - /// - /// - parameters: - /// - context: Runtime ``LambdaContext``. - /// - event: Event of type `Event` representing the event or request. - /// - /// - Returns: An `EventLoopFuture` to report the result of the Lambda back to the runtime engine. - /// The `EventLoopFuture` should be completed with either a response of type ``Output`` or an `Error`. - func handle(_ event: Event, context: LambdaContext) -> EventLoopFuture - - /// Encode a response of type ``Output`` to `ByteBuffer`. - /// Concrete Lambda handlers implement this method to provide coding functionality. - /// - parameters: - /// - value: Response of type ``Output``. - /// - buffer: A `ByteBuffer` to encode into, will be overwritten. - /// - /// - Returns: A `ByteBuffer` with the encoded version of the `value`. - func encode(value: Output, into buffer: inout ByteBuffer) throws - - /// Decode a `ByteBuffer` to a request or event of type ``Event``. - /// Concrete Lambda handlers implement this method to provide coding functionality. - /// - /// - parameters: - /// - buffer: The `ByteBuffer` to decode. - /// - /// - Returns: A request or event of type ``Event``. - func decode(buffer: ByteBuffer) throws -> Event +let runtime = LambdaRuntime { + (event: String, context: LambdaContext) in + return String(event.reversed()) } -``` - -### LambdaHandler - -`LambdaHandler` is a strongly typed, completion handler based asynchronous processing protocol for a Lambda that takes a user defined `Event` and returns a user defined `Output`. -`LambdaHandler` provides `ByteBuffer` -> `Event` decoding and `Output` -> `ByteBuffer` encoding for `Codable` and `String`. - -`LambdaHandler` offloads the user provided Lambda execution to an async task making processing safer but slightly slower. - -```swift -public protocol LambdaHandler { - /// The lambda function's input. In most cases this should be `Codable`. If your event originates from an - /// AWS service, have a look at [AWSLambdaEvents](https://github.com/swift-server/swift-aws-lambda-events), - /// which provides a number of commonly used AWS Event implementations. - associatedtype Event - /// The lambda function's output. Can be `Void`. - associatedtype Output - - /// The Lambda initialization method. - /// Use this method to initialize resources that will be used in every request. - /// - /// Examples for this can be HTTP or database clients. - /// - parameters: - /// - context: Runtime ``LambdaInitializationContext``. - init(context: LambdaInitializationContext) async throws - - /// The Lambda handling method. - /// Concrete Lambda handlers implement this method to provide the Lambda functionality. - /// - /// - parameters: - /// - event: Event of type `Event` representing the event or request. - /// - context: Runtime ``LambdaContext``. - /// - /// - Returns: A Lambda result ot type `Output`. - func handle(_ event: Event, context: LambdaContext) async throws -> Output - - /// Encode a response of type ``Output`` to `ByteBuffer`. - /// Concrete Lambda handlers implement this method to provide coding functionality. - /// - parameters: - /// - value: Response of type ``Output``. - /// - buffer: A `ByteBuffer` to encode into, will be overwritten. - /// - /// - Returns: A `ByteBuffer` with the encoded version of the `value`. - func encode(value: Output, into buffer: inout ByteBuffer) throws - - /// Decode a `ByteBuffer` to a request or event of type ``Event``. - /// Concrete Lambda handlers implement this method to provide coding functionality. - /// - /// - parameters: - /// - buffer: The `ByteBuffer` to decode. - /// - /// - Returns: A request or event of type ``Event``. - func decode(buffer: ByteBuffer) throws -> Event -} +try await runtime.run() ``` -### SimpleLambdaHandler +4. Build & archive the package -`SimpleLambdaHandler` is a strongly typed, completion handler based asynchronous processing protocol for a Lambda that takes a user defined `Event` and returns a user defined `Output`. - -`SimpleLambdaHandler` provides `ByteBuffer` -> `Event` decoding and `Output` -> `ByteBuffer` encoding for `Codable` and `String`. - -`SimpleLambdaHandler` is the same as `LambdaHandler`, but does not require explicit initialization . - -```swift -public protocol SimpleLambdaHandler { - /// The lambda function's input. In most cases this should be `Codable`. If your event originates from an - /// AWS service, have a look at [AWSLambdaEvents](https://github.com/swift-server/swift-aws-lambda-events), - /// which provides a number of commonly used AWS Event implementations. - associatedtype Event - /// The lambda function's output. Can be `Void`. - associatedtype Output - - init() - - /// The Lambda handling method. - /// Concrete Lambda handlers implement this method to provide the Lambda functionality. - /// - /// - parameters: - /// - event: Event of type `Event` representing the event or request. - /// - context: Runtime ``LambdaContext``. - /// - /// - Returns: A Lambda result ot type `Output`. - func handle(_ event: Event, context: LambdaContext) async throws -> Output - - /// Encode a response of type ``Output`` to `ByteBuffer`. - /// Concrete Lambda handlers implement this method to provide coding functionality. - /// - parameters: - /// - value: Response of type ``Output``. - /// - buffer: A `ByteBuffer` to encode into, will be overwritten. - /// - /// - Returns: A `ByteBuffer` with the encoded version of the `value`. - func encode(value: Output, into buffer: inout ByteBuffer) throws - - /// Decode a `ByteBuffer` to a request or event of type ``Event``. - /// Concrete Lambda handlers implement this method to provide coding functionality. - /// - /// - parameters: - /// - buffer: The `ByteBuffer` to decode. - /// - /// - Returns: A request or event of type ``Event``. - func decode(buffer: ByteBuffer) throws -> Event -} -``` - -### Context - -When calling the user provided Lambda function, the library provides a `LambdaContext` class that provides metadata about the execution context, as well as utilities for logging, allocating buffers and dispatch background tasks. - -```swift -public struct LambdaContext: CustomDebugStringConvertible, Sendable { - /// The request ID, which identifies the request that triggered the function invocation. - public var requestID: String { - self.storage.requestID - } - - /// The AWS X-Ray tracing header. - public var traceID: String { - self.storage.traceID - } - - /// The ARN of the Lambda function, version, or alias that's specified in the invocation. - public var invokedFunctionARN: String { - self.storage.invokedFunctionARN - } - - /// The timestamp that the function times out. - public var deadline: DispatchWallTime { - self.storage.deadline - } - - /// For invocations from the AWS Mobile SDK, data about the Amazon Cognito identity provider. - public var cognitoIdentity: String? { - self.storage.cognitoIdentity - } - - /// For invocations from the AWS Mobile SDK, data about the client application and device. - public var clientContext: String? { - self.storage.clientContext - } - - /// `Logger` to log with. - /// - /// - note: The `LogLevel` can be configured using the `LOG_LEVEL` environment variable. - public var logger: Logger { - self.storage.logger - } - - /// The `EventLoop` the Lambda is executed on. Use this to schedule work with. - /// This is useful when implementing the ``EventLoopLambdaHandler`` protocol. - /// - /// - note: The `EventLoop` is shared with the Lambda runtime engine and should be handled with extra care. - /// Most importantly the `EventLoop` must never be blocked. - public var eventLoop: EventLoop { - self.storage.eventLoop - } - - /// `ByteBufferAllocator` to allocate `ByteBuffer`. - /// This is useful when implementing ``EventLoopLambdaHandler``. - public var allocator: ByteBufferAllocator { - self.storage.allocator - } -} +```bash +swift build +swift package archive --disable-sandbox ``` -Similarally, the library provides a context if and when initializing the Lambda. +If there is no error, there is a ZIP file ready to deploy. +The ZIP file is located at `.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/MyLambda/MyLambda.zip` -```swift -public struct LambdaInitializationContext: Sendable { - /// `Logger` to log with. - /// - /// - note: The `LogLevel` can be configured using the `LOG_LEVEL` environment variable. - public let logger: Logger - - /// The `EventLoop` the Lambda is executed on. Use this to schedule work with. - /// - /// - note: The `EventLoop` is shared with the Lambda runtime engine and should be handled with extra care. - /// Most importantly the `EventLoop` must never be blocked. - public let eventLoop: EventLoop - - /// `ByteBufferAllocator` to allocate `ByteBuffer`. - public let allocator: ByteBufferAllocator - - /// ``LambdaTerminator`` to register shutdown operations. - public let terminator: LambdaTerminator -} -``` +5. Deploy to AWS -### Background tasks +There are multiple ways to deploy to AWS ([SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html), [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started), [AWS Cloud Development Kit (CDK)](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html), [AWS Console](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)) that are covered later in this doc. -The detachedBackgroundTask method allows you to register background tasks that continue running even after the Lambda runtime has reported the result of a synchronous invocation. This is particularly useful for integrations with services like API Gateway or CloudFront, where you can quickly return a response without waiting for non-essential tasks such as flushing metrics or performing non-critical clean-up operations. +Here is how to deploy using the `aws` command line. -```swift - @main - struct MyLambda: SimpleLambdaHandler { - func handle(_ request: APIGatewayV2Request, context: LambdaContext) async throws -> APIGatewayV2Response { - let response = makeResponse() - context.detachedBackgroundTask { - try? await Task.sleep(for: .seconds(3)) - print("Background task completed") - } - print("Returning response") - return response - } - } +```bash +aws lambda create-function \ +--function-name MyLambda \ +--zip-file fileb://.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/MyLambda/MyLambda.zip \ +--runtime provided.al2 \ +--handler provided \ +--architectures arm64 \ +--role arn:aws:iam:::role/lambda_basic_execution ``` -### Configuration - -The library’s behavior can be fine tuned using environment variables based configuration. The library supported the following environment variables: - -* `LOG_LEVEL`: Define the logging level as defined by [SwiftLog](https://github.com/apple/swift-log). Set to INFO by default. -* `MAX_REQUESTS`: Max cycles the library should handle before exiting. Set to none by default. -* `STOP_SIGNAL`: Signal to capture for termination. Set to `TERM` by default. -* `REQUEST_TIMEOUT`: Max time to wait for responses to come back from the AWS Runtime engine. Set to none by default. - -### AWS Lambda Runtime Engine Integration - -The library is designed to integrate with AWS Lambda Runtime Engine via the [AWS Lambda Runtime API](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html) which was introduced as part of [AWS Lambda Custom Runtimes](https://aws.amazon.com/about-aws/whats-new/2018/11/aws-lambda-now-supports-custom-runtimes-and-layers/) in 2018. The latter is an HTTP server that exposes three main RESTful endpoint: - -* `/runtime/invocation/next` -* `/runtime/invocation/response` -* `/runtime/invocation/error` - -A single Lambda execution workflow is made of the following steps: - -1. The library calls AWS Lambda Runtime Engine `/next` endpoint to retrieve the next invocation request. -2. The library parses the response HTTP headers and populate the `Context` object. -3. The library reads the `/next` response body and attempt to decode it. Typically it decodes to user provided `Event` type which extends `Decodable`, but users may choose to write Lambda functions that receive the input as `String` or `ByteBuffer` which require less, or no decoding. -4. The library hands off the `Context` and `Event` event to the user provided handler. In the case of `LambdaHandler` based handler this is done on a dedicated `DispatchQueue`, providing isolation between user's and the library's code. -5. User provided handler processes the request asynchronously, invoking a callback or returning a future upon completion, which returns a `Result` type with the `Output` or `Error` populated. -6. In case of error, the library posts to AWS Lambda Runtime Engine `/error` endpoint to provide the error details, which will show up on AWS Lambda logs. -7. In case of success, the library will attempt to encode the response. Typically it encodes from user provided `Output` type which extends `Encodable`, but users may choose to write Lambda functions that return a `String` or `ByteBuffer`, which require less, or no encoding. The library then posts the response to AWS Lambda Runtime Engine `/response` endpoint to provide the response to the callee. - -The library encapsulates the workflow via the internal `LambdaRuntimeClient` and `LambdaRunner` structs respectively. - -### Lifecycle Management - -AWS Lambda Runtime Engine controls the Application lifecycle and in the happy case never terminates the application, only suspends its execution when no work is available. - -As such, the library's main entry point is designed to run forever in a blocking fashion, performing the workflow described above in an endless loop. - -That loop is broken if/when an internal error occurs, such as a failure to communicate with AWS Lambda Runtime Engine API, or under other unexpected conditions. - -By default, the library also registers a Signal handler that traps `INT` and `TERM`, which are typical Signals used in modern deployment platforms to communicate shutdown request. - -### Integration with AWS Platform Events - -AWS Lambda functions can be invoked directly from the AWS Lambda console UI, AWS Lambda API, AWS SDKs, AWS CLI, and AWS toolkits. More commonly, they are invoked as a reaction to an events coming from the AWS platform. To make it easier to integrate with AWS platform events, [Swift AWS Lambda Runtime Events](http://github.com/swift-server/swift-aws-lambda-events) library is available, designed to work together with this runtime library. [Swift AWS Lambda Runtime Events](http://github.com/swift-server/swift-aws-lambda-events) includes an `AWSLambdaEvents` target which provides abstractions for many commonly used events. - -## Performance - -Lambda functions performance is usually measured across two axes: - -- **Cold start times**: The time it takes for a Lambda function to startup, ask for an invocation and process the first invocation. - -- **Warm invocation times**: The time it takes for a Lambda function to process an invocation after the Lambda has been invoked at least once. - -Larger packages size (Zip file uploaded to AWS Lambda) negatively impact the cold start time, since AWS needs to download and unpack the package before starting the process. - -Swift provides great Unicode support via [ICU](http://site.icu-project.org/home). Therefore, Swift-based Lambda functions include the ICU libraries which tend to be large. This impacts the download time mentioned above and an area for further optimization. Some of the alternatives worth exploring are using the system ICU that comes with Amazon Linux (albeit older than the one Swift ships with) or working to remove the ICU dependency altogether. We welcome ideas and contributions to this end. +The `--architectures` flag is only required when you build the binary on an Apple Silicon machine (Apple M1 or more recent). It defaults to `x64`. -## Security +Be sure to replace with your actual AWS account ID (for example: 012345678901). -Please see [SECURITY.md](SECURITY.md) for details on the security process. +6. Invoke your Lambda function -## Project status - -This is a community-driven open-source project actively seeking contributions. -There are several areas which need additional attention, including but not limited to: - -* Further performance tuning -* Additional documentation and best practices -* Additional examples - ---- -# Version 0.x (previous version) documentation ---- - -## Getting started - -If you have never used AWS Lambda or Docker before, check out this [getting started guide](https://fabianfett.de/getting-started-with-swift-aws-lambda-runtime) which helps you with every step from zero to a running Lambda. - -First, create a SwiftPM project and pull Swift AWS Lambda Runtime as dependency into your project - - ```swift - // swift-tools-version:5.6 - - import PackageDescription - - let package = Package( - name: "my-lambda", - products: [ - .executable(name: "MyLambda", targets: ["MyLambda"]), - ], - dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "0.1.0"), - ], - targets: [ - .executableTarget(name: "MyLambda", dependencies: [ - .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), - ]), - ] - ) - ``` - -Next, create a `main.swift` and implement your Lambda. - -### Using Closures - -The simplest way to use `AWSLambdaRuntime` is to pass in a closure, for example: - - ```swift - // Import the module - import AWSLambdaRuntime - - // in this example we are receiving and responding with strings - Lambda.run { (context, name: String, callback: @escaping (Result) -> Void) in - callback(.success("Hello, \(name)")) - } - ``` - - More commonly, the event would be a JSON, which is modeled using `Codable`, for example: - - ```swift - // Import the module - import AWSLambdaRuntime - - // Request, uses Codable for transparent JSON encoding - private struct Request: Codable { - let name: String - } - - // Response, uses Codable for transparent JSON encoding - private struct Response: Codable { - let message: String - } - - // In this example we are receiving and responding with `Codable`. - Lambda.run { (context, request: Request, callback: @escaping (Result) -> Void) in - callback(.success(Response(message: "Hello, \(request.name)"))) - } - ``` - - Since most Lambda functions are triggered by events originating in the AWS platform like `SNS`, `SQS` or `APIGateway`, the [Swift AWS Lambda Events](http://github.com/swift-server/swift-aws-lambda-events) package includes an `AWSLambdaEvents` module that provides implementations for most common AWS event types further simplifying writing Lambda functions. For example, handling an `SQS` message: - -First, add a dependency on the event packages: - - ```swift - // swift-tools-version:5.6 - - import PackageDescription - - let package = Package( - name: "my-lambda", - products: [ - .executable(name: "MyLambda", targets: ["MyLambda"]), - ], - dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "0.1.0"), - ], - targets: [ - .executableTarget(name: "MyLambda", dependencies: [ - .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), - .product(name: "AWSLambdaEvents", package: "swift-aws-lambda-runtime"), - ]), - ] - ) - ``` - - - ```swift - // Import the modules - import AWSLambdaRuntime - import AWSLambdaEvents - - // In this example we are receiving an SQS Event, with no response (Void). - Lambda.run { (context, message: SQS.Event, callback: @escaping (Result) -> Void) in - ... - callback(.success(Void())) - } - ``` - - Modeling Lambda functions as Closures is both simple and safe. Swift AWS Lambda Runtime will ensure that the user-provided code is offloaded from the network processing thread such that even if the code becomes slow to respond or gets stuck, the underlying process can continue to function. This safety comes at a small performance penalty from context switching between threads. In many cases, the simplicity and safety of using the Closure based API is often preferred over the complexity of the performance-oriented API. - -### Using EventLoopLambdaHandler - - Performance sensitive Lambda functions may choose to use a more complex API which allows user code to run on the same thread as the networking handlers. Swift AWS Lambda Runtime uses [SwiftNIO](https://github.com/apple/swift-nio) as its underlying networking engine which means the APIs are based on [SwiftNIO](https://github.com/apple/swift-nio) concurrency primitives like the `EventLoop` and `EventLoopFuture`. For example: - - ```swift - // Import the modules - import AWSLambdaRuntime - import AWSLambdaEvents - import NIO - - // Our Lambda handler, conforms to EventLoopLambdaHandler - struct Handler: EventLoopLambdaHandler { - typealias In = SNS.Message // Request type - typealias Out = Void // Response type - - // In this example we are receiving an SNS Message, with no response (Void). - func handle(context: Lambda.Context, event: In) -> EventLoopFuture { - ... - context.eventLoop.makeSucceededFuture(Void()) - } - } - - Lambda.run(Handler()) - ``` - - Beyond the small cognitive complexity of using the `EventLoopFuture` based APIs, note these APIs should be used with extra care. An `EventLoopLambdaHandler` will execute the user code on the same `EventLoop` (thread) as the library, making processing faster but requiring the user code to never call blocking APIs as it might prevent the underlying process from functioning. - -## Deploying to AWS Lambda - -To deploy Lambda functions to AWS Lambda, you need to compile the code for Amazon Linux which is the OS used on AWS Lambda microVMs, package it as a Zip file, and upload to AWS. - -AWS offers several tools to interact and deploy Lambda functions to AWS Lambda including [SAM](https://aws.amazon.com/serverless/sam/) and the [AWS CLI](https://aws.amazon.com/cli/). The [Examples Directory](/Examples) includes complete sample build and deployment scripts that utilize these tools. - -Note the examples mentioned above use dynamic linking, therefore bundle the required Swift libraries in the Zip package along side the executable. You may choose to link the Lambda function statically (using `-static-stdlib`) which could improve performance but requires additional linker flags. - -To build the Lambda function for Amazon Linux, use the Docker image published by Swift.org on [Swift toolchains and Docker images for Amazon Linux 2](https://swift.org/download/), as demonstrated in the examples. - -## Architecture - -The library defines three protocols for the implementation of a Lambda Handler. From low-level to more convenient: - -### ByteBufferLambdaHandler - -An `EventLoopFuture` based processing protocol for a Lambda that takes a `ByteBuffer` and returns a `ByteBuffer?` asynchronously. - -`ByteBufferLambdaHandler` is the lowest level protocol designed to power the higher level `EventLoopLambdaHandler` and `LambdaHandler` based APIs. Users are not expected to use this protocol, though some performance sensitive applications that operate at the `ByteBuffer` level or have special serialization needs may choose to do so. - -```swift -public protocol ByteBufferLambdaHandler { - /// The Lambda handling method - /// Concrete Lambda handlers implement this method to provide the Lambda functionality. - /// - /// - parameters: - /// - context: Runtime `Context`. - /// - event: The event or request payload encoded as `ByteBuffer`. - /// - /// - Returns: An `EventLoopFuture` to report the result of the Lambda back to the runtime engine. - /// The `EventLoopFuture` should be completed with either a response encoded as `ByteBuffer` or an `Error` - func handle(context: Lambda.Context, event: ByteBuffer) -> EventLoopFuture -} +```bash +aws lambda invoke \ +--function-name MyLambda \ +--payload $(echo \"Hello World\" | base64) \ +out.txt && cat out.txt && rm out.txt ``` -### EventLoopLambdaHandler - -`EventLoopLambdaHandler` is a strongly typed, `EventLoopFuture` based asynchronous processing protocol for a Lambda that takes a user defined `In` and returns a user defined `Out`. - -`EventLoopLambdaHandler` extends `ByteBufferLambdaHandler`, providing `ByteBuffer` -> `In` decoding and `Out` -> `ByteBuffer?` encoding for `Codable` and `String`. +This should print -`EventLoopLambdaHandler` executes the user provided Lambda on the same `EventLoop` as the core runtime engine, making the processing fast but requires more care from the implementation to never block the `EventLoop`. It it designed for performance sensitive applications that use `Codable` or `String` based Lambda functions. - -```swift -public protocol EventLoopLambdaHandler: ByteBufferLambdaHandler { - associatedtype In - associatedtype Out - - /// The Lambda handling method - /// Concrete Lambda handlers implement this method to provide the Lambda functionality. - /// - /// - parameters: - /// - context: Runtime `Context`. - /// - event: Event of type `In` representing the event or request. - /// - /// - Returns: An `EventLoopFuture` to report the result of the Lambda back to the runtime engine. - /// The `EventLoopFuture` should be completed with either a response of type `Out` or an `Error` - func handle(context: Lambda.Context, event: In) -> EventLoopFuture - - /// Encode a response of type `Out` to `ByteBuffer` - /// Concrete Lambda handlers implement this method to provide coding functionality. - /// - parameters: - /// - allocator: A `ByteBufferAllocator` to help allocate the `ByteBuffer`. - /// - value: Response of type `Out`. - /// - /// - Returns: A `ByteBuffer` with the encoded version of the `value`. - func encode(allocator: ByteBufferAllocator, value: Out) throws -> ByteBuffer? - - /// Decode a`ByteBuffer` to a request or event of type `In` - /// Concrete Lambda handlers implement this method to provide coding functionality. - /// - /// - parameters: - /// - buffer: The `ByteBuffer` to decode. - /// - /// - Returns: A request or event of type `In`. - func decode(buffer: ByteBuffer) throws -> In -} ``` - -### LambdaHandler - -`LambdaHandler` is a strongly typed, completion handler based asynchronous processing protocol for a Lambda that takes a user defined `In` and returns a user defined `Out`. - -`LambdaHandler` extends `ByteBufferLambdaHandler`, performing `ByteBuffer` -> `In` decoding and `Out` -> `ByteBuffer` encoding for `Codable` and `String`. - -`LambdaHandler` offloads the user provided Lambda execution to a `DispatchQueue` making processing safer but slower. - -```swift -public protocol LambdaHandler: EventLoopLambdaHandler { - /// Defines to which `DispatchQueue` the Lambda execution is offloaded to. - var offloadQueue: DispatchQueue { get } - - /// The Lambda handling method - /// Concrete Lambda handlers implement this method to provide the Lambda functionality. - /// - /// - parameters: - /// - context: Runtime `Context`. - /// - event: Event of type `In` representing the event or request. - /// - callback: Completion handler to report the result of the Lambda back to the runtime engine. - /// The completion handler expects a `Result` with either a response of type `Out` or an `Error` - func handle(context: Lambda.Context, event: In, callback: @escaping (Result) -> Void) +{ + "StatusCode": 200, + "ExecutedVersion": "$LATEST" } +"dlroW olleH" ``` -### Closures +## Swift AWS Lambda Runtime -In addition to protocol-based Lambda, the library provides support for Closure-based ones, as demonstrated in the overview section above. Closure-based Lambdas are based on the `LambdaHandler` protocol which mean they are safer. For most use cases, Closure-based Lambda is a great fit and users are encouraged to use them. +Many modern systems have client components like iOS, macOS or watchOS applications as well as server components that those clients interact with. Serverless functions are often the easiest and most efficient way for client application developers to extend their applications into the cloud. -The library includes implementations for `Codable` and `String` based Lambda. Since AWS Lambda is primarily JSON based, this covers the most common use cases. +Serverless functions are increasingly becoming a popular choice for running event-driven or otherwise ad-hoc compute tasks in the cloud. They power mission critical microservices and data intensive workloads. In many cases, serverless functions allow developers to more easily scale and control compute costs given their on-demand nature. -```swift -public typealias CodableClosure = (Lambda.Context, In, @escaping (Result) -> Void) -> Void -``` +When using serverless functions, attention must be given to resource utilization as it directly impacts the costs of the system. This is where Swift shines! With its low memory footprint, deterministic performance, and quick start time, Swift is a fantastic match for the serverless functions architecture. -```swift -public typealias StringClosure = (Lambda.Context, String, @escaping (Result) -> Void) -> Void -``` +Combine this with Swift's developer friendliness, expressiveness, and emphasis on safety, and we have a solution that is great for developers at all skill levels, scalable, and cost effective. -This design allows for additional event types as well, and such Lambda implementation can extend one of the above protocols and provided their own `ByteBuffer` -> `In` decoding and `Out` -> `ByteBuffer` encoding. +Swift AWS Lambda Runtime was designed to make building Lambda functions in Swift simple and safe. The library is an implementation of the [AWS Lambda Runtime API](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html) and uses an embedded asynchronous HTTP Client based on [SwiftNIO](http://github.com/apple/swift-nio) that is fine-tuned for performance in the AWS Runtime context. The library provides a multi-tier API that allows building a range of Lambda functions: From quick and simple closures to complex, performance-sensitive event handlers. -### Context +## Design Principles -When calling the user provided Lambda function, the library provides a `Context` class that provides metadata about the execution context, as well as utilities for logging and allocating buffers. +tbd + reference to the `v2-api.md` design doc. -```swift -public final class Context { - /// The request ID, which identifies the request that triggered the function invocation. - public let requestID: String +## Tutorial - /// The AWS X-Ray tracing header. - public let traceID: String +link to [updated docc tutorial](https://swiftpackageindex.com/swift-server/swift-aws-lambda-runtime/1.0.0-alpha.3/tutorials/table-of-content) - /// The ARN of the Lambda function, version, or alias that's specified in the invocation. - public let invokedFunctionARN: String +## AWSLambdaRuntime API - /// The timestamp that the function times out - public let deadline: DispatchWallTime +tbd - /// For invocations from the AWS Mobile SDK, data about the Amazon Cognito identity provider. - public let cognitoIdentity: String? +### Lambda Streaming Response - /// For invocations from the AWS Mobile SDK, data about the client application and device. - public let clientContext: String? +tbd + link to docc - /// `Logger` to log with - /// - /// - note: The `LogLevel` can be configured using the `LOG_LEVEL` environment variable. - public let logger: Logger +### Integration with Swift Service LifeCycle - /// The `EventLoop` the Lambda is executed on. Use this to schedule work with. - /// This is useful when implementing the `EventLoopLambdaHandler` protocol. - /// - /// - note: The `EventLoop` is shared with the Lambda runtime engine and should be handled with extra care. - /// Most importantly the `EventLoop` must never be blocked. - public let eventLoop: EventLoop +tbd + link to docc - /// `ByteBufferAllocator` to allocate `ByteBuffer` - /// This is useful when implementing `EventLoopLambdaHandler` - public let allocator: ByteBufferAllocator -} -``` +### Background Tasks + +tbd + link to docc From 6660c99abfaf7861c42fff2ef28e2ed51961f3df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Tue, 8 Oct 2024 06:19:23 -0400 Subject: [PATCH 042/177] fix local deps in plugin (#389) * fix local deps in plugin * swift format --- Plugins/AWSLambdaPackager/Plugin.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/AWSLambdaPackager/Plugin.swift b/Plugins/AWSLambdaPackager/Plugin.swift index f342c770..01c28d47 100644 --- a/Plugins/AWSLambdaPackager/Plugin.swift +++ b/Plugins/AWSLambdaPackager/Plugin.swift @@ -128,7 +128,7 @@ struct AWSLambdaPackager: CommandPlugin { print("building \"\(product.name)\"") let buildCommand = "swift build -c \(buildConfiguration.rawValue) --product \(product.name) --static-swift-stdlib" - if ProcessInfo.processInfo.environment["LAMBDA_USE_LOCAL_DEPS"] != nil { + if let localPath = ProcessInfo.processInfo.environment["LAMBDA_USE_LOCAL_DEPS"] { // when developing locally, we must have the full swift-aws-lambda-runtime project in the container // because Examples' Package.swift have a dependency on ../.. // just like Package.swift's examples assume ../.., we assume we are two levels below the root project @@ -136,7 +136,7 @@ struct AWSLambdaPackager: CommandPlugin { try Utils.execute( executable: dockerToolPath, arguments: [ - "run", "--rm", "--env", "LAMBDA_USE_LOCAL_DEPS=true", "-v", + "run", "--rm", "--env", "LAMBDA_USE_LOCAL_DEPS=\(localPath)", "-v", "\(packageDirectory.path())../..:/workspace", "-w", "/workspace/\(slice.joined(separator: "/"))", baseImage, "bash", "-cl", buildCommand, ], From 8daf9e5378d4ff12338018c40307bc019413b967 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Tue, 8 Oct 2024 06:56:00 -0400 Subject: [PATCH 043/177] fix license check for yaml files (#390) * fix license check --- .licenseignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.licenseignore b/.licenseignore index c535d3fc..796c53d5 100644 --- a/.licenseignore +++ b/.licenseignore @@ -30,3 +30,5 @@ Package.resolved **/ResourcePackaging/hello.txt .mailmap .swiftformat +*.yaml +*.yml From f7584d1257d6a09a3643210c37f6d78dce0b3971 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Tue, 8 Oct 2024 08:10:53 -0400 Subject: [PATCH 044/177] add docker fine grained permission to the plugin (#391) * add docker fine grained permission to the plugin * swift-format --- Examples/APIGateway/README.md | 2 +- Examples/HelloWorld/README.md | 2 +- Package.swift | 8 +++++++- Plugins/AWSLambdaPackager/Plugin.swift | 2 +- .../Resources/code/04-01-02-plugin-archive.sh | 2 +- .../Resources/code/04-01-03-plugin-archive.sh | 2 +- .../Resources/code/04-01-04-plugin-archive.sh | 2 +- .../Documentation.docc/quick-setup.md | 2 +- readme.md | 2 +- 9 files changed, 15 insertions(+), 9 deletions(-) diff --git a/Examples/APIGateway/README.md b/Examples/APIGateway/README.md index ca731ec6..f534f9ba 100644 --- a/Examples/APIGateway/README.md +++ b/Examples/APIGateway/README.md @@ -22,7 +22,7 @@ To build the package, type the following commands. ```bash swift build -swift package archive --disable-sandbox +swift package archive --allow-network-access docker ``` If there is no error, there is a ZIP file ready to deploy. diff --git a/Examples/HelloWorld/README.md b/Examples/HelloWorld/README.md index e3e2e08b..7709c3ef 100644 --- a/Examples/HelloWorld/README.md +++ b/Examples/HelloWorld/README.md @@ -18,7 +18,7 @@ To build & archive the package, type the following commands. ```bash swift build -swift package archive --disable-sandbox +swift package archive --allow-network-access docker ``` If there is no error, there is a ZIP file ready to deploy. diff --git a/Package.swift b/Package.swift index fe9533bd..1c97e40d 100644 --- a/Package.swift +++ b/Package.swift @@ -55,7 +55,13 @@ let package = Package( verb: "archive", description: "Archive the Lambda binary and prepare it for uploading to AWS. Requires docker on macOS or non Amazonlinux 2 distributions." - ) + ), + permissions: [ + .allowNetworkConnections( + scope: .docker, + reason: "This plugin uses Docker to create the AWS Lambda ZIP package." + ) + ] ) ), .testTarget( diff --git a/Plugins/AWSLambdaPackager/Plugin.swift b/Plugins/AWSLambdaPackager/Plugin.swift index 01c28d47..916e7bc7 100644 --- a/Plugins/AWSLambdaPackager/Plugin.swift +++ b/Plugins/AWSLambdaPackager/Plugin.swift @@ -287,7 +287,7 @@ struct AWSLambdaPackager: CommandPlugin { REQUIREMENTS: To use this plugin, you must have docker installed and started. - USAGE: swift package --disable-sandbox archive [--help] [--verbose] + USAGE: swift package --allow-network-access docker archive [--help] [--verbose] [--output-directory ] [--products ] [--configuration debug | release] diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-02-plugin-archive.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-02-plugin-archive.sh index 41e7a628..e1b4aa05 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-02-plugin-archive.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-02-plugin-archive.sh @@ -1,2 +1,2 @@ -swift package --disable-sandbox plugin archive +swift package --allow-network-access docker plugin archive diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-03-plugin-archive.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-03-plugin-archive.sh index 9878f478..37a5cd1b 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-03-plugin-archive.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-03-plugin-archive.sh @@ -1,4 +1,4 @@ -swift package --disable-sandbox plugin archive +swift package --allow-network-access docker archive ------------------------------------------------------------------------- building "squarenumberlambda" in docker diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-04-plugin-archive.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-04-plugin-archive.sh index 7652bf1c..b35c9f65 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-04-plugin-archive.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-04-plugin-archive.sh @@ -1,4 +1,4 @@ -swift package --disable-sandbox plugin archive +swift package --allow-network-access docker archive ------------------------------------------------------------------------- building "squarenumberlambda" in docker diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md b/Sources/AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md index 151fb8c3..60065baa 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md @@ -106,7 +106,7 @@ AWS Lambda runtime runs on Amazon Linux. You must compile your code for Amazon L > Be sure to have [Docker](https://docs.docker.com/desktop/install/mac-install/) installed for this step. ```sh -swift package --disable-sandbox plugin archive +swift package --allow-network-access docker archive ------------------------------------------------------------------------- building "squarenumberlambda" in docker diff --git a/readme.md b/readme.md index fd68681c..e33b5379 100644 --- a/readme.md +++ b/readme.md @@ -83,7 +83,7 @@ try await runtime.run() ```bash swift build -swift package archive --disable-sandbox +swift package archive --allow-network-access docker ``` If there is no error, there is a ZIP file ready to deploy. From d2bd7f1aae1fc9455b208567ba5d85e42463c82c Mon Sep 17 00:00:00 2001 From: Fabian Fett Date: Tue, 8 Oct 2024 17:46:53 +0200 Subject: [PATCH 045/177] Fix docs CI (#392) --- .github/workflows/pull_request.yml | 4 +- Plugins/AWSLambdaPackager/PluginUtils.swift | 2 +- Sources/AWSLambdaRuntime/Lambda+Codable.swift | 14 +++---- .../AWSLambdaRuntimeCore/Lambda+Codable.swift | 26 ++++++------- .../AWSLambdaRuntimeCore/LambdaHandlers.swift | 37 ++++++++++--------- 5 files changed, 42 insertions(+), 41 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 39e033e2..f7522664 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -11,8 +11,8 @@ jobs: with: license_header_check_project_name: "SwiftAWSLambdaRuntime" shell_check_enabled: false - api_breakage_check_container_image: "swiftlang/swift:nightly-6.0-jammy" - docs_check_container_image: "swiftlang/swift:nightly-6.0-jammy" + api_breakage_check_container_image: "swift:6.0-noble" + docs_check_container_image: "swift:6.0-noble" unit-tests: name: Unit tests diff --git a/Plugins/AWSLambdaPackager/PluginUtils.swift b/Plugins/AWSLambdaPackager/PluginUtils.swift index 0cc3b5fe..11827200 100644 --- a/Plugins/AWSLambdaPackager/PluginUtils.swift +++ b/Plugins/AWSLambdaPackager/PluginUtils.swift @@ -32,7 +32,7 @@ struct Utils { let fd = dup(1) let stdout = fdopen(fd, "rw") - defer { fclose(stdout) } + defer { fclose(stdout!) } // We need to use an unsafe transfer here to get the fd into our Sendable closure. // This transfer is fine, because we write to the variable from a single SerialDispatchQueue here. diff --git a/Sources/AWSLambdaRuntime/Lambda+Codable.swift b/Sources/AWSLambdaRuntime/Lambda+Codable.swift index 531eb96b..8dc848d1 100644 --- a/Sources/AWSLambdaRuntime/Lambda+Codable.swift +++ b/Sources/AWSLambdaRuntime/Lambda+Codable.swift @@ -43,8 +43,8 @@ public struct LambdaJSONOutputEncoder: LambdaOutputEncoder { extension LambdaCodableAdapter { /// Initializes an instance given an encoder, decoder, and a handler with a non-`Void` output. /// - Parameters: - /// - encoder: The encoder object that will be used to encode the generic ``Output`` obtained from the `handler`'s `outputWriter` into a ``ByteBuffer``. - /// - decoder: The decoder object that will be used to decode the received ``ByteBuffer`` event into the generic ``Event`` type served to the `handler`. + /// - encoder: The encoder object that will be used to encode the generic `Output` obtained from the `handler`'s `outputWriter` into a `ByteBuffer`. + /// - decoder: The decoder object that will be used to decode the received `ByteBuffer` event into the generic `Event` type served to the `handler`. /// - handler: The handler object. public init( encoder: JSONEncoder, @@ -66,10 +66,10 @@ extension LambdaCodableAdapter { } extension LambdaRuntime { - /// Initialize an instance with a ``LambdaHandler`` defined in the form of a closure **with a non-`Void` return type**. + /// Initialize an instance with a `LambdaHandler` defined in the form of a closure **with a non-`Void` return type**. /// - Parameter body: The handler in the form of a closure. - /// - Parameter encoder: The encoder object that will be used to encode the generic ``Output`` into a ``ByteBuffer``. ``JSONEncoder()`` used as default. - /// - Parameter decoder: The decoder object that will be used to decode the incoming ``ByteBuffer`` event into the generic ``Event`` type. ``JSONDecoder()`` used as default. + /// - Parameter encoder: The encoder object that will be used to encode the generic `Output` into a `ByteBuffer`. `JSONEncoder()` used as default. + /// - Parameter decoder: The decoder object that will be used to decode the incoming `ByteBuffer` event into the generic `Event` type. `JSONDecoder()` used as default. public convenience init( body: @escaping (Event, LambdaContext) async throws -> Output, encoder: JSONEncoder = JSONEncoder(), @@ -93,9 +93,9 @@ extension LambdaRuntime { self.init(handler: handler) } - /// Initialize an instance with a ``LambdaHandler`` defined in the form of a closure **with a `Void` return type**. + /// Initialize an instance with a `LambdaHandler` defined in the form of a closure **with a `Void` return type**. /// - Parameter body: The handler in the form of a closure. - /// - Parameter decoder: The decoder object that will be used to decode the incoming ``ByteBuffer`` event into the generic ``Event`` type. ``JSONDecoder()`` used as default. + /// - Parameter decoder: The decoder object that will be used to decode the incoming `ByteBuffer` event into the generic `Event` type. `JSONDecoder()` used as default. public convenience init( body: @escaping (Event, LambdaContext) async throws -> Void, decoder: JSONDecoder = JSONDecoder() diff --git a/Sources/AWSLambdaRuntimeCore/Lambda+Codable.swift b/Sources/AWSLambdaRuntimeCore/Lambda+Codable.swift index fdc4c0b4..7a0a9a22 100644 --- a/Sources/AWSLambdaRuntimeCore/Lambda+Codable.swift +++ b/Sources/AWSLambdaRuntimeCore/Lambda+Codable.swift @@ -15,9 +15,9 @@ import NIOCore /// The protocol a decoder must conform to so that it can be used with ``LambdaCodableAdapter`` to decode incoming -/// ``ByteBuffer`` events. +/// `ByteBuffer` events. public protocol LambdaEventDecoder { - /// Decode the ``ByteBuffer`` representing the received event into the generic ``Event`` type + /// Decode the `ByteBuffer` representing the received event into the generic `Event` type /// the handler will receive. /// - Parameters: /// - type: The type of the object to decode the buffer into. @@ -27,14 +27,14 @@ public protocol LambdaEventDecoder { } /// The protocol an encoder must conform to so that it can be used with ``LambdaCodableAdapter`` to encode the generic -/// ``Output`` object into a ``ByteBuffer``. +/// ``LambdaOutputEncoder/Output`` object into a `ByteBuffer`. public protocol LambdaOutputEncoder { associatedtype Output - /// Encode the generic type `Output` the handler has returned into a ``ByteBuffer``. + /// Encode the generic type `Output` the handler has returned into a `ByteBuffer`. /// - Parameters: - /// - value: The object to encode into a ``ByteBuffer``. - /// - buffer: The ``ByteBuffer`` where the encoded value will be written to. + /// - value: The object to encode into a `ByteBuffer`. + /// - buffer: The `ByteBuffer` where the encoded value will be written to. func encode(_ value: Output, into buffer: inout ByteBuffer) throws } @@ -62,7 +62,7 @@ public struct LambdaHandlerAdapter< self.handler = handler } - /// Passes the generic ``Event`` object to the ``LambdaHandler/handle(_:context:)`` function, and + /// Passes the generic `Event` object to the ``LambdaHandler/handle(_:context:)`` function, and /// the resulting output is then written to ``LambdaWithBackgroundProcessingHandler``'s `outputWriter`. /// - Parameters: /// - event: The received event. @@ -93,9 +93,9 @@ public struct LambdaCodableAdapter< @usableFromInline var byteBuffer: ByteBuffer = .init() /// Initializes an instance given an encoder, decoder, and a handler with a non-`Void` output. - /// - Parameters: - /// - encoder: The encoder object that will be used to encode the generic ``Output`` obtained from the `handler`'s `outputWriter` into a ``ByteBuffer``. - /// - decoder: The decoder object that will be used to decode the received ``ByteBuffer`` event into the generic ``Event`` type served to the `handler`. + /// - Parameters: + /// - encoder: The encoder object that will be used to encode the generic `Output` obtained from the `handler`'s `outputWriter` into a `ByteBuffer`. + /// - decoder: The decoder object that will be used to decode the received `ByteBuffer` event into the generic `Event` type served to the `handler`. /// - handler: The handler object. @inlinable public init(encoder: Encoder, decoder: Decoder, handler: Handler) where Output: Encodable { @@ -106,8 +106,8 @@ public struct LambdaCodableAdapter< /// Initializes an instance given a decoder, and a handler with a `Void` output. /// - Parameters: - /// - decoder: The decoder object that will be used to decode the received ``ByteBuffer`` event into the generic ``Event`` type served to the `handler`. - /// - handler: The handler object. + /// - decoder: The decoder object that will be used to decode the received `ByteBuffer` event into the generic `Event` type served to the `handler`. + /// - handler: The handler object. @inlinable public init(decoder: Decoder, handler: Handler) where Output == Void, Encoder == VoidEncoder { self.encoder = VoidEncoder() @@ -145,7 +145,7 @@ where Output == Encoder.Output { /// Initializes an instance given an encoder and an underlying ``LambdaResponseStreamWriter``. /// - Parameters: - /// - encoder: The encoder object that will be used to encode the generic ``Output`` into a ``ByteBuffer``, which will then be passed to `streamWriter`. + /// - encoder: The encoder object that will be used to encode the generic `Output` into a `ByteBuffer`, which will then be passed to `streamWriter`. /// - streamWriter: The underlying ``LambdaResponseStreamWriter`` that will be wrapped. @inlinable public init(encoder: Encoder, streamWriter: Base) { diff --git a/Sources/AWSLambdaRuntimeCore/LambdaHandlers.swift b/Sources/AWSLambdaRuntimeCore/LambdaHandlers.swift index e112e29a..9b6f8300 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaHandlers.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaHandlers.swift @@ -14,7 +14,7 @@ import NIOCore -/// The base handler protocol that receives a ``ByteBuffer`` representing the incoming event and returns the response as a ``ByteBuffer`` too. +/// The base handler protocol that receives a `ByteBuffer` representing the incoming event and returns the response as a `ByteBuffer` too. /// This handler protocol supports response streaming. Bytes can be streamed outwards through the ``LambdaResponseStreamWriter`` /// passed as an argument in the ``handle(_:responseWriter:context:)`` function. /// Background work can also be executed after returning the response. After closing the response stream by calling @@ -69,12 +69,12 @@ public protocol LambdaHandler { /// The body of the request sent to Lambda will be decoded into this type for the handler to consume. associatedtype Event: Decodable /// Generic output type. - /// This is the return type of the ``handle(_:context:)`` function. + /// This is the return type of the ``LambdaHandler/handle(_:context:)`` function. associatedtype Output /// Implement the business logic of the Lambda function here. /// - Parameters: - /// - event: The generic ``Event`` object representing the invocation's input data. + /// - event: The generic ``LambdaHandler/Event`` object representing the invocation's input data. /// - context: The ``LambdaContext`` containing the invocation's metadata. /// - Returns: A generic ``Output`` object representing the computed result. func handle(_ event: Event, context: LambdaContext) async throws -> Output @@ -83,8 +83,9 @@ public protocol LambdaHandler { /// This protocol is exactly like ``LambdaHandler``, with the only difference being the added support for executing background /// work after the result has been sent to the AWS Lambda control plane. /// This is achieved by not having a return type in the `handle` function. The output is instead written into a -/// ``LambdaResponseWriter``that is passed in as an argument, meaning that the ``handle(_:)`` function is then free to implement -/// any background work after the result has been sent to the AWS Lambda control plane. +/// ``LambdaResponseWriter``that is passed in as an argument, meaning that the +/// ``LambdaWithBackgroundProcessingHandler/handle(_:outputWriter:context:)`` function is then +/// free to implement any background work after the result has been sent to the AWS Lambda control plane. public protocol LambdaWithBackgroundProcessingHandler { /// Generic input type. /// The body of the request sent to Lambda will be decoded into this type for the handler to consume. @@ -95,7 +96,7 @@ public protocol LambdaWithBackgroundProcessingHandler { /// Implement the business logic of the Lambda function here. /// - Parameters: - /// - event: The generic ``Event`` object representing the invocation's input data. + /// - event: The generic ``LambdaWithBackgroundProcessingHandler/Event`` object representing the invocation's input data. /// - outputWriter: The writer to send the computed response to. A call to `outputWriter.write(_:)` will return the response to the AWS Lambda response endpoint. /// Any background work can then be executed before returning. /// - context: The ``LambdaContext`` containing the invocation's metadata. @@ -111,7 +112,7 @@ public protocol LambdaWithBackgroundProcessingHandler { /// have a return type and exit at that point. This allows for background work to be executed _after_ a response has been sent to the AWS Lambda response endpoint. public protocol LambdaResponseWriter { associatedtype Output - /// Sends the generic ``Output`` object (representing the computed result of the handler) + /// Sends the generic ``LambdaResponseWriter/Output`` object (representing the computed result of the handler) /// to the AWS Lambda response endpoint. /// This function simply serves as a mechanism to return the computed result from a handler function /// without an explicit `return`. @@ -131,18 +132,18 @@ public struct StreamingClosureHandler: StreamingLambdaHandler { self.body = body } - /// Calls the provided `self.body` closure with the ``ByteBuffer`` invocation event, the ``LambdaResponseStreamWriter``, and the ``LambdaContext`` + /// Calls the provided `self.body` closure with the `ByteBuffer` invocation event, the ``LambdaResponseStreamWriter``, and the ``LambdaContext`` /// - Parameters: /// - event: The invocation's input data. /// - responseWriter: A ``LambdaResponseStreamWriter`` to write the invocation's response to. - /// If no response or error is written to `responseWriter` an error will be reported to the invoker. + /// If no response or error is written to `responseWriter` an error will be reported to the invoker. /// - context: The ``LambdaContext`` containing the invocation's metadata. public func handle( - _ request: ByteBuffer, + _ event: ByteBuffer, responseWriter: some LambdaResponseStreamWriter, context: LambdaContext ) async throws { - try await self.body(request, responseWriter, context) + try await self.body(event, responseWriter, context) } } @@ -163,9 +164,9 @@ public struct ClosureHandler: LambdaHandler { self.body = body } - /// Calls the provided `self.body` closure with the generic ``Event`` object representing the incoming event, and the ``LambdaContext`` + /// Calls the provided `self.body` closure with the generic `Event` object representing the incoming event, and the ``LambdaContext`` /// - Parameters: - /// - event: The generic ``Event`` object representing the invocation's input data. + /// - event: The generic `Event` object representing the invocation's input data. /// - context: The ``LambdaContext`` containing the invocation's metadata. public func handle(_ event: Event, context: LambdaContext) async throws -> Output { try await self.body(event, context) @@ -183,8 +184,8 @@ extension LambdaRuntime { /// Initialize an instance with a ``LambdaHandler`` defined in the form of a closure **with a non-`Void` return type**, an encoder, and a decoder. /// - Parameter body: The handler in the form of a closure. - /// - Parameter encoder: The encoder object that will be used to encode the generic ``Output`` into a ``ByteBuffer``. - /// - Parameter decoder: The decoder object that will be used to decode the incoming ``ByteBuffer`` event into the generic ``Event`` type. + /// - Parameter encoder: The encoder object that will be used to encode the generic `Output` into a `ByteBuffer`. + /// - Parameter decoder: The decoder object that will be used to decode the incoming `ByteBuffer` event into the generic `Event` type. public convenience init< Event: Decodable, Output: Encodable, @@ -214,9 +215,9 @@ extension LambdaRuntime { } /// Initialize an instance with a ``LambdaHandler`` defined in the form of a closure **with a `Void` return type**, an encoder, and a decoder. - /// - Parameter body: The handler in the form of a closure. - /// - Parameter encoder: The encoder object that will be used to encode the generic ``Output`` into a ``ByteBuffer``. - /// - Parameter decoder: The decoder object that will be used to decode the incoming ``ByteBuffer`` event into the generic ``Event`` type. + /// - Parameters: + /// - decoder: The decoder object that will be used to decode the incoming `ByteBuffer` event into the generic `Event` type. + /// - body: The handler in the form of a closure. public convenience init( decoder: Decoder, body: @escaping (Event, LambdaContext) async throws -> Void From 600e48c2aac1f6429e83f24b2d366177dc92e4d0 Mon Sep 17 00:00:00 2001 From: Fabian Fett Date: Tue, 8 Oct 2024 17:53:57 +0200 Subject: [PATCH 046/177] Remove swift-testing package dependency (#393) --- Package.swift | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/Package.swift b/Package.swift index 1c97e40d..8bbc061f 100644 --- a/Package.swift +++ b/Package.swift @@ -23,9 +23,8 @@ let package = Package( .library(name: "AWSLambdaTesting", targets: ["AWSLambdaTesting"]), ], dependencies: [ - .package(url: "https://github.com/apple/swift-nio.git", .upToNextMajor(from: "2.72.0")), - .package(url: "https://github.com/apple/swift-log.git", .upToNextMajor(from: "1.5.4")), - .package(url: "https://github.com/apple/swift-testing.git", branch: "swift-DEVELOPMENT-SNAPSHOT-2024-08-29-a"), + .package(url: "https://github.com/apple/swift-nio.git", from: "2.72.0"), + .package(url: "https://github.com/apple/swift-log.git", from: "1.5.4"), ], targets: [ .target( @@ -70,7 +69,6 @@ let package = Package( .byName(name: "AWSLambdaRuntimeCore"), .product(name: "NIOTestUtils", package: "swift-nio"), .product(name: "NIOFoundationCompat", package: "swift-nio"), - .product(name: "Testing", package: "swift-testing"), ], swiftSettings: [.swiftLanguageMode(.v5)] ), @@ -79,7 +77,6 @@ let package = Package( dependencies: [ .byName(name: "AWSLambdaRuntimeCore"), .byName(name: "AWSLambdaRuntime"), - .product(name: "Testing", package: "swift-testing"), ], swiftSettings: [.swiftLanguageMode(.v5)] ), @@ -95,8 +92,7 @@ let package = Package( .testTarget( name: "AWSLambdaTestingTests", dependencies: [ - .byName(name: "AWSLambdaTesting"), - .product(name: "Testing", package: "swift-testing"), + .byName(name: "AWSLambdaTesting") ] ), // for perf testing From 4295e51bbb3d88452f8a24b1ab71a712e83919d3 Mon Sep 17 00:00:00 2001 From: Fabian Fett Date: Tue, 8 Oct 2024 19:40:12 +0200 Subject: [PATCH 047/177] Opt into Swift 6 language mode for most targets (#356) * Opt into Swift 6 language mode for most targets * fix parameter order to allow trailing closure syntax --- Package.swift | 3 +- Sources/AWSLambdaRuntime/Lambda+Codable.swift | 15 ++-- Sources/AWSLambdaRuntimeCore/Lambda.swift | 2 +- .../AWSLambdaRuntimeCore/LambdaHandlers.swift | 4 +- .../LambdaRequestID.swift | 7 +- .../MockLambdaServer.swift | 73 +++++++++++-------- 6 files changed, 59 insertions(+), 45 deletions(-) diff --git a/Package.swift b/Package.swift index 8bbc061f..2550ad34 100644 --- a/Package.swift +++ b/Package.swift @@ -33,8 +33,7 @@ let package = Package( .byName(name: "AWSLambdaRuntimeCore"), .product(name: "NIOCore", package: "swift-nio"), .product(name: "NIOFoundationCompat", package: "swift-nio"), - ], - swiftSettings: [.swiftLanguageMode(.v5)] + ] ), .target( name: "AWSLambdaRuntimeCore", diff --git a/Sources/AWSLambdaRuntime/Lambda+Codable.swift b/Sources/AWSLambdaRuntime/Lambda+Codable.swift index 8dc848d1..2ab63855 100644 --- a/Sources/AWSLambdaRuntime/Lambda+Codable.swift +++ b/Sources/AWSLambdaRuntime/Lambda+Codable.swift @@ -67,13 +67,14 @@ extension LambdaCodableAdapter { extension LambdaRuntime { /// Initialize an instance with a `LambdaHandler` defined in the form of a closure **with a non-`Void` return type**. - /// - Parameter body: The handler in the form of a closure. - /// - Parameter encoder: The encoder object that will be used to encode the generic `Output` into a `ByteBuffer`. `JSONEncoder()` used as default. - /// - Parameter decoder: The decoder object that will be used to decode the incoming `ByteBuffer` event into the generic `Event` type. `JSONDecoder()` used as default. + /// - Parameters: + /// - decoder: The decoder object that will be used to decode the incoming `ByteBuffer` event into the generic `Event` type. `JSONDecoder()` used as default. + /// - encoder: The encoder object that will be used to encode the generic `Output` into a `ByteBuffer`. `JSONEncoder()` used as default. + /// - body: The handler in the form of a closure. public convenience init( - body: @escaping (Event, LambdaContext) async throws -> Output, + decoder: JSONDecoder = JSONDecoder(), encoder: JSONEncoder = JSONEncoder(), - decoder: JSONDecoder = JSONDecoder() + body: sending @escaping (Event, LambdaContext) async throws -> Output ) where Handler == LambdaCodableAdapter< @@ -97,8 +98,8 @@ extension LambdaRuntime { /// - Parameter body: The handler in the form of a closure. /// - Parameter decoder: The decoder object that will be used to decode the incoming `ByteBuffer` event into the generic `Event` type. `JSONDecoder()` used as default. public convenience init( - body: @escaping (Event, LambdaContext) async throws -> Void, - decoder: JSONDecoder = JSONDecoder() + decoder: JSONDecoder = JSONDecoder(), + body: sending @escaping (Event, LambdaContext) async throws -> Void ) where Handler == LambdaCodableAdapter< diff --git a/Sources/AWSLambdaRuntimeCore/Lambda.swift b/Sources/AWSLambdaRuntimeCore/Lambda.swift index 87026693..3ba90e9c 100644 --- a/Sources/AWSLambdaRuntimeCore/Lambda.swift +++ b/Sources/AWSLambdaRuntimeCore/Lambda.swift @@ -60,7 +60,7 @@ public enum Lambda { } /// The default EventLoop the Lambda is scheduled on. - public static var defaultEventLoop: any EventLoop = NIOSingletons.posixEventLoopGroup.next() + public static let defaultEventLoop: any EventLoop = NIOSingletons.posixEventLoopGroup.next() } // MARK: - Public API diff --git a/Sources/AWSLambdaRuntimeCore/LambdaHandlers.swift b/Sources/AWSLambdaRuntimeCore/LambdaHandlers.swift index 9b6f8300..b76b453d 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaHandlers.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaHandlers.swift @@ -194,7 +194,7 @@ extension LambdaRuntime { >( encoder: Encoder, decoder: Decoder, - body: @escaping (Event, LambdaContext) async throws -> Output + body: sending @escaping (Event, LambdaContext) async throws -> Output ) where Handler == LambdaCodableAdapter< @@ -220,7 +220,7 @@ extension LambdaRuntime { /// - body: The handler in the form of a closure. public convenience init( decoder: Decoder, - body: @escaping (Event, LambdaContext) async throws -> Void + body: sending @escaping (Event, LambdaContext) async throws -> Void ) where Handler == LambdaCodableAdapter< diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRequestID.swift b/Sources/AWSLambdaRuntimeCore/LambdaRequestID.swift index 22a4275e..df576947 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRequestID.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRequestID.swift @@ -88,15 +88,16 @@ struct LambdaRequestID { } /// thread safe secure random number generator. - private static var generator = SystemRandomNumberGenerator() private static func generateRandom() -> Self { + var generator = SystemRandomNumberGenerator() + var _uuid: uuid_t = LambdaRequestID.null // https://tools.ietf.org/html/rfc4122#page-14 // o Set all the other bits to randomly (or pseudo-randomly) chosen // values. withUnsafeMutableBytes(of: &_uuid) { ptr in - ptr.storeBytes(of: Self.generator.next(), toByteOffset: 0, as: UInt64.self) - ptr.storeBytes(of: Self.generator.next(), toByteOffset: 8, as: UInt64.self) + ptr.storeBytes(of: generator.next(), toByteOffset: 0, as: UInt64.self) + ptr.storeBytes(of: generator.next(), toByteOffset: 8, as: UInt64.self) } // o Set the four most significant bits (bits 12 through 15) of the diff --git a/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift b/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift index 1d56da69..cc3c4ac2 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift @@ -27,8 +27,8 @@ func withMockServer( _ body: (_ port: Int) async throws -> Result ) async throws -> Result { let eventLoopGroup = NIOSingletons.posixEventLoopGroup - let server = MockLambdaServer(behavior: behaviour, port: port, keepAlive: keepAlive) - let port = try await server.start().get() + let server = MockLambdaServer(behavior: behaviour, port: port, keepAlive: keepAlive, eventLoopGroup: eventLoopGroup) + let port = try await server.start() let result: Swift.Result do { @@ -37,13 +37,13 @@ func withMockServer( result = .failure(error) } - try? await server.stop().get() + try? await server.stop() return try result.get() } -final class MockLambdaServer { +final class MockLambdaServer { private let logger = Logger(label: "MockLambdaServer") - private let behavior: LambdaServerBehavior + private let behavior: Behavior private let host: String private let port: Int private let keepAlive: Bool @@ -52,7 +52,13 @@ final class MockLambdaServer { private var channel: Channel? private var shutdown = false - init(behavior: LambdaServerBehavior, host: String = "127.0.0.1", port: Int = 7000, keepAlive: Bool = true) { + init( + behavior: Behavior, + host: String = "127.0.0.1", + port: Int = 7000, + keepAlive: Bool = true, + eventLoopGroup: MultiThreadedEventLoopGroup + ) { self.group = NIOSingletons.posixEventLoopGroup self.behavior = behavior self.host = host @@ -64,39 +70,41 @@ final class MockLambdaServer { assert(shutdown) } - func start() -> EventLoopFuture { - let bootstrap = ServerBootstrap(group: group) + fileprivate func start() async throws -> Int { + let logger = self.logger + let keepAlive = self.keepAlive + let behavior = self.behavior + + let channel = try await ServerBootstrap(group: group) .serverChannelOption(ChannelOptions.socket(SocketOptionLevel(SOL_SOCKET), SO_REUSEADDR), value: 1) .childChannelInitializer { channel in do { try channel.pipeline.syncOperations.configureHTTPServerPipeline(withErrorHandling: true) try channel.pipeline.syncOperations.addHandler( - HTTPHandler(logger: self.logger, keepAlive: self.keepAlive, behavior: self.behavior) + HTTPHandler(logger: logger, keepAlive: keepAlive, behavior: behavior) ) return channel.eventLoop.makeSucceededVoidFuture() } catch { return channel.eventLoop.makeFailedFuture(error) } } - return bootstrap.bind(host: self.host, port: self.port).flatMap { channel in - self.channel = channel - guard let localAddress = channel.localAddress else { - return channel.eventLoop.makeFailedFuture(ServerError.cantBind) - } - self.logger.info("\(self) started and listening on \(localAddress)") - return channel.eventLoop.makeSucceededFuture(localAddress.port!) + .bind(host: self.host, port: self.port) + .get() + + self.channel = channel + guard let localAddress = channel.localAddress else { + throw ServerError.cantBind } + self.logger.info("\(self) started and listening on \(localAddress)") + return localAddress.port! } - func stop() -> EventLoopFuture { + fileprivate func stop() async throws { self.logger.info("stopping \(self)") - guard let channel = self.channel else { - return self.group.next().makeFailedFuture(ServerError.notReady) - } - return channel.close().always { _ in - self.shutdown = true - self.logger.info("\(self) stopped") - } + let channel = self.channel! + try? await channel.close().get() + self.shutdown = true + self.logger.info("\(self) stopped") } } @@ -221,32 +229,37 @@ final class HTTPHandler: ChannelInboundHandler { } let head = HTTPResponseHead(version: HTTPVersion(major: 1, minor: 1), status: status, headers: headers) + let logger = self.logger context.write(wrapOutboundOut(.head(head))).whenFailure { error in - self.logger.error("\(self) write error \(error)") + logger.error("write error \(error)") } if let b = body { var buffer = context.channel.allocator.buffer(capacity: b.utf8.count) buffer.writeString(b) context.write(wrapOutboundOut(.body(.byteBuffer(buffer)))).whenFailure { error in - self.logger.error("\(self) write error \(error)") + logger.error("write error \(error)") } } + let loopBoundContext = NIOLoopBound(context, eventLoop: context.eventLoop) + + let keepAlive = self.keepAlive context.writeAndFlush(wrapOutboundOut(.end(nil))).whenComplete { result in if case .failure(let error) = result { - self.logger.error("\(self) write error \(error)") + logger.error("write error \(error)") } - if !self.keepAlive { + if !keepAlive { + let context = loopBoundContext.value context.close().whenFailure { error in - self.logger.error("\(self) close error \(error)") + logger.error("close error \(error)") } } } } } -protocol LambdaServerBehavior { +protocol LambdaServerBehavior: Sendable { func getInvocation() -> GetInvocationResult func processResponse(requestId: String, response: String?) -> Result func processError(requestId: String, error: ErrorResponse) -> Result From 2c002cc72144fe5a3f9332bb59439462472f66ad Mon Sep 17 00:00:00 2001 From: Fabian Fett Date: Tue, 8 Oct 2024 19:44:56 +0200 Subject: [PATCH 048/177] Use Mutex instead of NIOLockedValueBox (#394) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Use Mutex instead of NIOLockedValueBox * fix format --------- Co-authored-by: Sébastien Stormacq --- Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift index 908e2ab2..7fd98cd6 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift @@ -14,15 +14,11 @@ import Foundation import Logging -import NIOConcurrencyHelpers import NIOCore +import Synchronization -// We need `@unchecked` Sendable here, as `NIOLockedValueBox` does not understand `sending` today. -// We don't want to use `NIOLockedValueBox` here anyway. We would love to use Mutex here, but this -// sadly crashes the compiler today. -public final class LambdaRuntime: @unchecked Sendable where Handler: StreamingLambdaHandler { - // TODO: We want to change this to Mutex as soon as this doesn't crash the Swift compiler on Linux anymore - let handlerMutex: NIOLockedValueBox +public final class LambdaRuntime: Sendable where Handler: StreamingLambdaHandler { + let handlerMutex: Mutex let logger: Logger let eventLoop: EventLoop @@ -31,7 +27,7 @@ public final class LambdaRuntime: @unchecked Sendable where Handler: St eventLoop: EventLoop = Lambda.defaultEventLoop, logger: Logger = Logger(label: "LambdaRuntime") ) { - self.handlerMutex = NIOLockedValueBox(handler) + self.handlerMutex = Mutex(handler) self.eventLoop = eventLoop self.logger = logger } @@ -45,7 +41,7 @@ public final class LambdaRuntime: @unchecked Sendable where Handler: St let ip = String(ipAndPort[0]) guard let port = Int(ipAndPort[1]) else { throw LambdaRuntimeError(code: .invalidPort) } - let handler = self.handlerMutex.withLockedValue { handler in + let handler = self.handlerMutex.withLock { handler in let result = handler handler = nil return result From 6d886aa21d43282043204bf71d6aa5396e8964c2 Mon Sep 17 00:00:00 2001 From: Fabian Fett Date: Tue, 8 Oct 2024 19:52:01 +0200 Subject: [PATCH 049/177] Ensure AWSLambdaRuntime only links FoundationEssentials MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sébastien Stormacq --- Package.swift | 3 +- Sources/AWSLambdaRuntime/Lambda+Codable.swift | 32 +++- .../Vendored/ByteBuffer-foundation.swift | 87 +++++++++++ .../Vendored/JSON+ByteBuffer.swift | 141 ++++++++++++++++++ 4 files changed, 253 insertions(+), 10 deletions(-) create mode 100644 Sources/AWSLambdaRuntime/Vendored/ByteBuffer-foundation.swift create mode 100644 Sources/AWSLambdaRuntime/Vendored/JSON+ByteBuffer.swift diff --git a/Package.swift b/Package.swift index 2550ad34..5a5798f3 100644 --- a/Package.swift +++ b/Package.swift @@ -32,8 +32,7 @@ let package = Package( dependencies: [ .byName(name: "AWSLambdaRuntimeCore"), .product(name: "NIOCore", package: "swift-nio"), - .product(name: "NIOFoundationCompat", package: "swift-nio"), - ] + ], ), .target( name: "AWSLambdaRuntimeCore", diff --git a/Sources/AWSLambdaRuntime/Lambda+Codable.swift b/Sources/AWSLambdaRuntime/Lambda+Codable.swift index 2ab63855..9193deff 100644 --- a/Sources/AWSLambdaRuntime/Lambda+Codable.swift +++ b/Sources/AWSLambdaRuntime/Lambda+Codable.swift @@ -14,7 +14,6 @@ @_exported import AWSLambdaRuntimeCore import NIOCore -import NIOFoundationCompat #if canImport(FoundationEssentials) import FoundationEssentials @@ -24,7 +23,24 @@ import class Foundation.JSONDecoder import class Foundation.JSONEncoder #endif -extension JSONDecoder: AWSLambdaRuntimeCore.LambdaEventDecoder {} +public struct LambdaJSONEventDecoder: LambdaEventDecoder { + @usableFromInline let jsonDecoder: JSONDecoder + + @inlinable + public init(_ jsonDecoder: JSONDecoder) { + self.jsonDecoder = jsonDecoder + } + + @inlinable + public func decode(_ type: Event.Type, from buffer: NIOCore.ByteBuffer) throws -> Event where Event : Decodable { + try buffer.getJSONDecodable( + Event.self, + decoder: self.jsonDecoder, + at: buffer.readerIndex, + length: buffer.readableBytes + )! // must work, enough readable bytes + } +} public struct LambdaJSONOutputEncoder: LambdaOutputEncoder { @usableFromInline let jsonEncoder: JSONEncoder @@ -36,7 +52,7 @@ public struct LambdaJSONOutputEncoder: LambdaOutputEncoder { @inlinable public func encode(_ value: Output, into buffer: inout ByteBuffer) throws { - try self.jsonEncoder.encode(value, into: &buffer) + try buffer.writeJSONEncodable(value, encoder: self.jsonEncoder) } } @@ -55,11 +71,11 @@ extension LambdaCodableAdapter { Output: Encodable, Output == Handler.Output, Encoder == LambdaJSONOutputEncoder, - Decoder == JSONDecoder + Decoder == LambdaJSONEventDecoder { self.init( encoder: LambdaJSONOutputEncoder(encoder), - decoder: decoder, + decoder: LambdaJSONEventDecoder(decoder), handler: handler ) } @@ -81,7 +97,7 @@ extension LambdaRuntime { LambdaHandlerAdapter>, Event, Output, - JSONDecoder, + LambdaJSONEventDecoder, LambdaJSONOutputEncoder > { @@ -106,12 +122,12 @@ extension LambdaRuntime { LambdaHandlerAdapter>, Event, Void, - JSONDecoder, + LambdaJSONEventDecoder, VoidEncoder > { let handler = LambdaCodableAdapter( - decoder: decoder, + decoder: LambdaJSONEventDecoder(decoder), handler: LambdaHandlerAdapter(handler: ClosureHandler(body: body)) ) diff --git a/Sources/AWSLambdaRuntime/Vendored/ByteBuffer-foundation.swift b/Sources/AWSLambdaRuntime/Vendored/ByteBuffer-foundation.swift new file mode 100644 index 00000000..6c289275 --- /dev/null +++ b/Sources/AWSLambdaRuntime/Vendored/ByteBuffer-foundation.swift @@ -0,0 +1,87 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftNIO open source project +// +// Copyright (c) 2017-2021 Apple Inc. and the SwiftNIO project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftNIO project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import Foundation +import NIOCore + +// This is NIO's `NIOFoundationCompat` module which at the moment only adds `ByteBuffer` utility methods +// for Foundation's `Data` type. +// +// The reason that it's not in the `NIO` module is that we don't want to have any direct Foundation dependencies +// in `NIO` as Foundation is problematic for a few reasons: +// +// - its implementation is different on Linux and on macOS which means our macOS tests might be inaccurate +// - on macOS Foundation is mostly written in ObjC which means the autorelease pool might get populated +// - `swift-corelibs-foundation` (the OSS Foundation used on Linux) links the world which will prevent anyone from +// having static binaries. It can also cause problems in the choice of an SSL library as Foundation already brings +// the platforms OpenSSL in which might cause problems. + +extension ByteBuffer { + /// Controls how bytes are transferred between `ByteBuffer` and other storage types. + @usableFromInline + enum ByteTransferStrategy: Sendable { + /// Force a copy of the bytes. + case copy + + /// Do not copy the bytes if at all possible. + case noCopy + + /// Use a heuristic to decide whether to copy the bytes or not. + case automatic + } + + // MARK: - Data APIs + + /// Return `length` bytes starting at `index` and return the result as `Data`. This will not change the reader index. + /// The selected bytes must be readable or else `nil` will be returned. + /// + /// - parameters: + /// - index: The starting index of the bytes of interest into the `ByteBuffer` + /// - length: The number of bytes of interest + /// - byteTransferStrategy: Controls how to transfer the bytes. See `ByteTransferStrategy` for an explanation + /// of the options. + /// - returns: A `Data` value containing the bytes of interest or `nil` if the selected bytes are not readable. + @usableFromInline + func getData(at index0: Int, length: Int, byteTransferStrategy: ByteTransferStrategy) -> Data? { + let index = index0 - self.readerIndex + guard index >= 0 && length >= 0 && index <= self.readableBytes - length else { + return nil + } + let doCopy: Bool + switch byteTransferStrategy { + case .copy: + doCopy = true + case .noCopy: + doCopy = false + case .automatic: + doCopy = length <= 256 * 1024 + } + + return self.withUnsafeReadableBytesWithStorageManagement { ptr, storageRef in + if doCopy { + return Data( + bytes: UnsafeMutableRawPointer(mutating: ptr.baseAddress!.advanced(by: index)), + count: Int(length) + ) + } else { + _ = storageRef.retain() + return Data( + bytesNoCopy: UnsafeMutableRawPointer(mutating: ptr.baseAddress!.advanced(by: index)), + count: Int(length), + deallocator: .custom { _, _ in storageRef.release() } + ) + } + } + } +} diff --git a/Sources/AWSLambdaRuntime/Vendored/JSON+ByteBuffer.swift b/Sources/AWSLambdaRuntime/Vendored/JSON+ByteBuffer.swift new file mode 100644 index 00000000..63f05405 --- /dev/null +++ b/Sources/AWSLambdaRuntime/Vendored/JSON+ByteBuffer.swift @@ -0,0 +1,141 @@ +// +// JSON+ByteBuffer.swift +// swift-aws-lambda-runtime +// +// Created by Fabian Fett on 06.09.24. +// + +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftNIO open source project +// +// Copyright (c) 2019-2021 Apple Inc. and the SwiftNIO project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftNIO project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +#if canImport(FoundationEssentials) +import FoundationEssentials +#else +import Foundation +#endif +import NIOCore + +extension ByteBuffer { + /// Attempts to decode the `length` bytes from `index` using the `JSONDecoder` `decoder` as `T`. + /// + /// - parameters: + /// - type: The type type that is attempted to be decoded. + /// - decoder: The `JSONDecoder` that is used for the decoding. + /// - index: The index of the first byte to decode. + /// - length: The number of bytes to decode. + /// - returns: The decoded value if successful or `nil` if there are not enough readable bytes available. + @inlinable + func getJSONDecodable( + _ type: T.Type, + decoder: JSONDecoder = JSONDecoder(), + at index: Int, + length: Int + ) throws -> T? { + guard let data = self.getData(at: index, length: length, byteTransferStrategy: .noCopy) else { + return nil + } + return try decoder.decode(T.self, from: data) + } + + /// Encodes `value` using the `JSONEncoder` `encoder` and set the resulting bytes into this `ByteBuffer` at the + /// given `index`. + /// + /// - note: The `writerIndex` remains unchanged. + /// + /// - parameters: + /// - value: An `Encodable` value to encode. + /// - encoder: The `JSONEncoder` to encode `value` with. + /// - returns: The number of bytes written. + @inlinable + @discardableResult + mutating func setJSONEncodable( + _ value: T, + encoder: JSONEncoder = JSONEncoder(), + at index: Int + ) throws -> Int { + let data = try encoder.encode(value) + return self.setBytes(data, at: index) + } + + /// Encodes `value` using the `JSONEncoder` `encoder` and writes the resulting bytes into this `ByteBuffer`. + /// + /// If successful, this will move the writer index forward by the number of bytes written. + /// + /// - parameters: + /// - value: An `Encodable` value to encode. + /// - encoder: The `JSONEncoder` to encode `value` with. + /// - returns: The number of bytes written. + @inlinable + @discardableResult + mutating func writeJSONEncodable( + _ value: T, + encoder: JSONEncoder = JSONEncoder() + ) throws -> Int { + let result = try self.setJSONEncodable(value, encoder: encoder, at: self.writerIndex) + self.moveWriterIndex(forwardBy: result) + return result + } +} + +extension JSONDecoder { + /// Returns a value of the type you specify, decoded from a JSON object inside the readable bytes of a `ByteBuffer`. + /// + /// If the `ByteBuffer` does not contain valid JSON, this method throws the + /// `DecodingError.dataCorrupted(_:)` error. If a value within the JSON + /// fails to decode, this method throws the corresponding error. + /// + /// - note: The provided `ByteBuffer` remains unchanged, neither the `readerIndex` nor the `writerIndex` will move. + /// If you would like the `readerIndex` to move, consider using `ByteBuffer.readJSONDecodable(_:length:)`. + /// + /// - parameters: + /// - type: The type of the value to decode from the supplied JSON object. + /// - buffer: The `ByteBuffer` that contains JSON object to decode. + /// - returns: The decoded object. + func decode(_ type: T.Type, from buffer: ByteBuffer) throws -> T { + try buffer.getJSONDecodable( + T.self, + decoder: self, + at: buffer.readerIndex, + length: buffer.readableBytes + )! // must work, enough readable bytes// must work, enough readable bytes + } +} + +extension JSONEncoder { + /// Writes a JSON-encoded representation of the value you supply into the supplied `ByteBuffer`. + /// + /// - parameters: + /// - value: The value to encode as JSON. + /// - buffer: The `ByteBuffer` to encode into. + @inlinable + func encode( + _ value: T, + into buffer: inout ByteBuffer + ) throws { + try buffer.writeJSONEncodable(value, encoder: self) + } + + /// Writes a JSON-encoded representation of the value you supply into a `ByteBuffer` that is freshly allocated. + /// + /// - parameters: + /// - value: The value to encode as JSON. + /// - allocator: The `ByteBufferAllocator` which is used to allocate the `ByteBuffer` to be returned. + /// - returns: The `ByteBuffer` containing the encoded JSON. + func encodeAsByteBuffer(_ value: T, allocator: ByteBufferAllocator) throws -> ByteBuffer { + let data = try self.encode(value) + var buffer = allocator.buffer(capacity: data.count) + buffer.writeBytes(data) + return buffer + } +} From 053de483f8d672d79a572205ed7a64daf7708974 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Tue, 8 Oct 2024 14:29:11 -0400 Subject: [PATCH 050/177] Misc small changes to fix CI (#395) * fix typo * fix license header * swift format --- Package.swift | 2 +- Sources/AWSLambdaRuntime/Lambda+Codable.swift | 3 ++- .../Vendored/ByteBuffer-foundation.swift | 14 ++++++++++++++ .../Vendored/JSON+ByteBuffer.swift | 16 ++++++++++++---- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/Package.swift b/Package.swift index 5a5798f3..eb78f9f9 100644 --- a/Package.swift +++ b/Package.swift @@ -32,7 +32,7 @@ let package = Package( dependencies: [ .byName(name: "AWSLambdaRuntimeCore"), .product(name: "NIOCore", package: "swift-nio"), - ], + ] ), .target( name: "AWSLambdaRuntimeCore", diff --git a/Sources/AWSLambdaRuntime/Lambda+Codable.swift b/Sources/AWSLambdaRuntime/Lambda+Codable.swift index 9193deff..5dffbdfe 100644 --- a/Sources/AWSLambdaRuntime/Lambda+Codable.swift +++ b/Sources/AWSLambdaRuntime/Lambda+Codable.swift @@ -32,7 +32,8 @@ public struct LambdaJSONEventDecoder: LambdaEventDecoder { } @inlinable - public func decode(_ type: Event.Type, from buffer: NIOCore.ByteBuffer) throws -> Event where Event : Decodable { + public func decode(_ type: Event.Type, from buffer: NIOCore.ByteBuffer) throws -> Event + where Event: Decodable { try buffer.getJSONDecodable( Event.self, decoder: self.jsonDecoder, diff --git a/Sources/AWSLambdaRuntime/Vendored/ByteBuffer-foundation.swift b/Sources/AWSLambdaRuntime/Vendored/ByteBuffer-foundation.swift index 6c289275..e0b6cf5e 100644 --- a/Sources/AWSLambdaRuntime/Vendored/ByteBuffer-foundation.swift +++ b/Sources/AWSLambdaRuntime/Vendored/ByteBuffer-foundation.swift @@ -1,3 +1,17 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2017-2022 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + //===----------------------------------------------------------------------===// // // This source file is part of the SwiftNIO open source project diff --git a/Sources/AWSLambdaRuntime/Vendored/JSON+ByteBuffer.swift b/Sources/AWSLambdaRuntime/Vendored/JSON+ByteBuffer.swift index 63f05405..092b2368 100644 --- a/Sources/AWSLambdaRuntime/Vendored/JSON+ByteBuffer.swift +++ b/Sources/AWSLambdaRuntime/Vendored/JSON+ByteBuffer.swift @@ -1,9 +1,16 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project // -// JSON+ByteBuffer.swift -// swift-aws-lambda-runtime +// Copyright (c) 2017-2022 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors // -// Created by Fabian Fett on 06.09.24. +// SPDX-License-Identifier: Apache-2.0 // +//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===// // @@ -19,12 +26,13 @@ // //===----------------------------------------------------------------------===// +import NIOCore + #if canImport(FoundationEssentials) import FoundationEssentials #else import Foundation #endif -import NIOCore extension ByteBuffer { /// Attempts to decode the `length` bytes from `index` using the `JSONDecoder` `decoder` as `T`. From a8eadf498e393c061412147e92c7dcfb2b34439d Mon Sep 17 00:00:00 2001 From: Fabian Fett Date: Wed, 9 Oct 2024 09:35:14 +0200 Subject: [PATCH 051/177] Revert "Use Mutex instead of NIOLockedValueBox (#394)" (#399) This reverts commit 2c002cc72144fe5a3f9332bb59439462472f66ad. --- Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift index 7fd98cd6..908e2ab2 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift @@ -14,11 +14,15 @@ import Foundation import Logging +import NIOConcurrencyHelpers import NIOCore -import Synchronization -public final class LambdaRuntime: Sendable where Handler: StreamingLambdaHandler { - let handlerMutex: Mutex +// We need `@unchecked` Sendable here, as `NIOLockedValueBox` does not understand `sending` today. +// We don't want to use `NIOLockedValueBox` here anyway. We would love to use Mutex here, but this +// sadly crashes the compiler today. +public final class LambdaRuntime: @unchecked Sendable where Handler: StreamingLambdaHandler { + // TODO: We want to change this to Mutex as soon as this doesn't crash the Swift compiler on Linux anymore + let handlerMutex: NIOLockedValueBox let logger: Logger let eventLoop: EventLoop @@ -27,7 +31,7 @@ public final class LambdaRuntime: Sendable where Handler: StreamingLamb eventLoop: EventLoop = Lambda.defaultEventLoop, logger: Logger = Logger(label: "LambdaRuntime") ) { - self.handlerMutex = Mutex(handler) + self.handlerMutex = NIOLockedValueBox(handler) self.eventLoop = eventLoop self.logger = logger } @@ -41,7 +45,7 @@ public final class LambdaRuntime: Sendable where Handler: StreamingLamb let ip = String(ipAndPort[0]) guard let port = Int(ipAndPort[1]) else { throw LambdaRuntimeError(code: .invalidPort) } - let handler = self.handlerMutex.withLock { handler in + let handler = self.handlerMutex.withLockedValue { handler in let result = handler handler = nil return result From 83bd667ccef0edaf819303fb42a7f5272ec2838a Mon Sep 17 00:00:00 2001 From: aryan-25 Date: Wed, 9 Oct 2024 09:05:02 +0100 Subject: [PATCH 052/177] v2 API Proposal Document (#339) Co-authored-by: Fabian Fett --- .../Proposals/0001-v2-api.md | 905 ++++++++++++++++++ 1 file changed, 905 insertions(+) create mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/Proposals/0001-v2-api.md diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Proposals/0001-v2-api.md b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Proposals/0001-v2-api.md new file mode 100644 index 00000000..e4ff259b --- /dev/null +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Proposals/0001-v2-api.md @@ -0,0 +1,905 @@ +# v2 API proposal for swift-aws-lambda-runtime + +`swift-aws-lambda-runtime` is an important library for the Swift on Server ecosystem. The initial API was written before +async/await was introduced to Swift. When async/await was introduced, shims were added to bridge between the underlying +SwiftNIO `EventLoop` interfaces and async/await. However, just like `gRPC-swift` and `postgres-nio`, we now want to +shift to solely using async/await instead of `EventLoop` interfaces. For this, large parts of the current API have to be +reconsidered. + +## Overview + +Versions: + +- v1 (2024-08-07): Initial version +- v1.1: + - Remove the `reportError(_:)` method from `LambdaResponseStreamWriter` and instead make the `handle(...)` method of + `StreamingLambdaHandler` throwing. + - Remove the `addBackgroundTask(_:)` method from `LambdaContext` due to structured concurrency concerns and introduce + the `LambdaWithBackgroundProcessingHandler` protocol as a solution. + - Introduce `LambdaHandlerAdapter`, which adapts handlers conforming to `LambdaHandler` with + `LambdaWithBackgroundProcessingHandler`. + - Update `LambdaCodableAdapter` to now be generic over any handler conforming to + `LambdaWithBackgroundProcessingHandler` instead of `LambdaHandler`. +- v1.2: + - Remove `~Copyable` from `LambdaResponseStreamWriter` and `LambdaResponseWriter`. Instead throw an error when + `finish()` is called multiple times or when `write`/`writeAndFinish` is called after `finish()`. + +## Motivation + +### Current Limitations + +#### EventLoop interfaces + +The current API extensively uses the `EventLoop` family of interfaces from SwiftNIO in many areas. To use these +interfaces correctly though, it requires developers to exercise great care and understand the various transform methods +that are used to work with `EventLoop`s and `EventLoopFuture`s. This results in a lot of cognitive complexity and makes +the code in the current API hard to reason about and maintain. For these reasons, the overarching trend in the Swift on +Server ecosystem is to shift to newer, more readable, Swift concurrency constructs and de-couple from SwiftNIO's +`EventLoop` interfaces. + +#### No ownership of the main() function + +A Lambda function can currently be implemented through conformance to the various handler protocols defined in +`AWSLambdaRuntimeCore/LambdaHandler`. Each of these protocols have an extension which implements a `static func main()`. +This allows users to annotate their `LambdaHandler` conforming object with `@main`. The `static func main()` calls the +internal `Lambda.run()` function, which starts the Lambda function. Since the `Lambda.run()` method is internal, users +cannot override the default implementation. This has proven challenging for users who want to +[set up global properties before the Lambda starts-up](https://github.com/swift-server/swift-aws-lambda-runtime/issues/265). +Setting up global properties is required to customize the Swift Logging, Metric and Tracing backend. + +#### Non-trivial transition from SimpleLambdaHandler to LambdaHandler + +The `SimpleLambdaHandler` protocol provides a quick and easy way to implement a basic Lambda function. It only requires +an implementation of the `handle` function where the business logic of the Lambda function can be written. +`SimpleLambdaHandler` is perfectly sufficient for small use-cases as the user does not need to spend much time looking +into the library. + +However, `SimpleLambdaHandler` cannot be used when services such as a database client need to be initialized before the +Lambda runtime starts and then also gracefully shutdown prior to the runtime terminating. This is because the only way +to register termination logic is through the `LambdaInitializationContext` (containing a field +`terminator: LambdaTerminator`) which is created and used _internally_ within `LambdaRuntime` and never exposed through +`SimpleLambdaHandler`. For such use-cases, other handler protocols like `LambdaHandler` must be used. `LambdaHandler` +exposes a `context` argument of type `LambdaInitializationContext` through its initializer. Within the initializer, +required services can be initialized and their graceful shutdown logic can be registered with the +`context.terminator.register` function. + +Yet, `LambdaHandler` is quite cumbersome to use in such use-cases as users have to deviate from the established norms of +the Swift on Server ecosystem in order to cleanly manage the lifecycle of the services intended to be used. This is +because the convenient `swift-service-lifecycle` v2 library — which is commonly used for cleanly managing the lifecycles +of required services and widely supported by many libraries — cannot be used in a structured concurrency manner. + +#### Does not integrate well with swift-service-lifecycle in a structured concurrency manner + +The Lambda runtime can only be started using the **internal** `Lambda.run()` function. This function is called by the +`main()` function defined by the `LambdaHandler` protocol, preventing users from injecting initialized services into the +runtime _prior_ to it starting. As shown below, this forces users to use an **unstructured concurrency** approach and +manually initialize services, leading to the issue of the user then perhaps forgetting to gracefully shutdown the +initialized services: + +```swift +struct MyLambda: LambdaHandler { + let pgClient: PostgresClient + + init(context: AWSLambdaRuntimeCore.LambdaInitializationContext) async throws { + /// Instantiate service + let client = PostgresClient(configuration: ...) + + /// Unstructured concurrency to initialize the service + let pgTask = Task { + await client.run() + } + + /// Store the client in `self` so that it can be used in `handle(...)` + self.pgClient = client + + /// !!! Must remember to explicitly register termination logic for PostgresClient !!! + context.terminator.register( + name: "PostgreSQL Client", + handler: { eventLoop in + pgTask.cancel() + return eventLoop.makeFutureWithTask { + await pgTask.value + } + } + ) + } + + func handle(_ event: Event, context: LambdaContext) async throws -> Output { + /// Use the initialized service stored in `self.pgClient` + try await self.pgClient.query(...) + } +} +``` + +#### Verbose Codable support + +In the current API, there are extensions and Codable wrapper classes for decoding events and encoding computed responses +for _each_ different handler protocol and for both `String` and `JSON` formats. This has resulted in a lot of +boilerplate code which can very easily be made generic and simplified in v2. + +### New features + +#### Support response streaming + +In April 2023 +[AWS introduced support for response streaming](https://aws.amazon.com/blogs/compute/introducing-aws-lambda-response-streaming/) +in Lambda. The current API does not support streaming. For v2 we want to change this. + +#### Scheduling background work + +In May +[AWS described in a blog post that you can run background tasks in Lambda](https://aws.amazon.com/blogs/compute/running-code-after-returning-a-response-from-an-aws-lambda-function/) +until the runtime asks for more work from the control plane. We want to support this by adding new API that allows +background processing, even after the response has been returned. + +## Proposed Solution + +### async/await-first API + +Large parts of `Lambda`, `LambdaHandler`, and `LambdaRuntime` will be re-written to use async/await constructs in place +of the `EventLoop` family of interfaces. + +### Providing ownership of main() and support for swift-service-lifecycle + +- Instead of conforming to a handler protocol, users can now create a `LambdaRuntime` by passing in a handler closure. +- `LambdaRuntime` conforms to `ServiceLifecycle.Service` by implementing a `run()` method that contains initialization + and graceful shutdown logic. +- This allows the lifecycle of the `LambdaRuntime` to be managed with `swift-service-lifecycle` _alongside_ and in the + same way the lifecycles of the required services are managed, e.g. + `try await ServiceGroup(services: [postgresClient, ..., lambdaRuntime], ...).run()`. +- Dependencies can now be injected into `LambdaRuntime`. With `swift-service-lifecycle`, services will be initialized + together with `LambdaRuntime`. +- The required services can then be used within the handler in a structured concurrency manner. + `swift-service-lifecycle` takes care of listening for termination signals and terminating the services as well as the + `LambdaRuntime` in correct order. +- `LambdaTerminator` can now be eliminated because its role is replaced with `swift-service-lifecycle`. The termination + logic of the Lambda function will be implemented in the conforming `run()` function of `LambdaRuntime`. + +With this, the earlier code snippet can be replaced with something much easier to read, maintain, and debug: + +```swift +/// Instantiate services +let postgresClient = PostgresClient() + +/// Instantiate LambdaRuntime with a closure handler implementing the business logic of the Lambda function +let runtime = LambdaRuntime { (event: Input, context: LambdaContext) in + /// Use initialized service within the handler + try await postgresClient.query(...) +} + +/// Use ServiceLifecycle to manage the initialization and termination +/// of the services as well as the LambdaRuntime +let serviceGroup = ServiceGroup( + services: [postgresClient, runtime], + configuration: .init(gracefulShutdownSignals: [.sigterm]), + logger: logger +) +try await serviceGroup.run() +``` + +### Simplifying Codable support + +A detailed explanation is provided in the **Codable Support** section. In short, much of the boilerplate code defined +for each handler protocol in `Lambda+Codable` and `Lambda+String` will be replaced with a single `LambdaCodableAdapter` +struct. + +This adapter struct is generic over (1) any handler conforming to a new handler protocol +`LambdaWithBackgroundProcessingHandler`, (2) the user-specified input and output types, and (3) any decoder and encoder +conforming to protocols `LambdaEventDecoder` and `LambdaOutputDecoder`. The adapter will wrap the underlying handler +with encoding/decoding logic. + +## Detailed Solution + +Below are explanations for all types that we want to use in AWS Lambda Runtime v2. + +### LambdaResponseStreamWriter + +We will introduce a new `LambdaResponseStreamWriter` protocol. It is used in the new `StreamingLambdaHandler` (defined +below), which is the new base protocol for the `LambdaRuntime` (defined below as well). + +```swift +/// A writer object to write the Lambda response stream into +public protocol LambdaResponseStreamWriter { + /// Write a response part into the stream. The HTTP response is started lazily before the first call to `write(_:)`. + /// Bytes written to the writer are streamed continually. + func write(_ buffer: ByteBuffer) async throws + /// End the response stream and the underlying HTTP response. + func finish() async throws + /// Write a response part into the stream and end the response stream as well as the underlying HTTP response. + func writeAndFinish(_ buffer: ByteBuffer) async throws +} +``` + +If the user does not call `finish()`, the library will automatically finish the stream after the last `write`. +Appropriate errors will be thrown if `finish()` is called multiple times, or if `write`/`writeAndFinish` is called after +`finish()`. + +### LambdaContext + +`LambdaContext` will be largely unchanged, but the `eventLoop` property will be removed. The `allocator` property of +type `ByteBufferAllocator` will also be removed because (1), we generally want to reduce the number of SwiftNIO types +exposed in the API, and (2), `ByteBufferAllocator` does not optimize the allocation strategies. The common pattern +observed across many libraries is to re-use existing `ByteBuffer`s as much as possible. This is also what we do for the +`LambdaCodableAdapter` (explained in the **Codable Support** section) implementation. + +```swift +/// A context object passed as part of an invocation in LambdaHandler handle functions. +public struct LambdaContext: Sendable { + /// The request ID, which identifies the request that triggered the function invocation. + public var requestID: String { get } + + /// The AWS X-Ray tracing header. + public var traceID: String { get } + + /// The ARN of the Lambda function, version, or alias that's specified in the invocation. + public var invokedFunctionARN: String { get } + + /// The timestamp that the function times out. + public var deadline: DispatchWallTime { get } + + /// For invocations from the AWS Mobile SDK, data about the Amazon Cognito identity provider. + public var cognitoIdentity: String? { get } + + /// For invocations from the AWS Mobile SDK, data about the client application and device. + public var clientContext: String? { get } + + /// `Logger` to log with. + /// + /// - note: The `LogLevel` can be configured using the `LOG_LEVEL` environment variable. + public var logger: Logger { get } +} +``` + +### Handlers + +We introduce three handler protocols: `StreamingLambdaHandler`, `LambdaHandler`, and +`LambdaWithBackgroundProcessingHandler`. + +#### StreamingLambdaHandler + +The new `StreamingLambdaHandler` protocol is the base protocol to implement a Lambda function. Most users will not use +this protocol and instead use the `LambdaHandler` protocol defined below. + +```swift +/// The base StreamingLambdaHandler protocol +public protocol StreamingLambdaHandler { + /// The business logic of the Lambda function + /// - Parameters: + /// - event: The invocation's input data + /// - responseWriter: A ``LambdaResponseStreamWriter`` to write the invocation's response to. + /// If no response or error is written to the `responseWriter` it will + /// report an error to the invoker. + /// - context: The LambdaContext containing the invocation's metadata + /// - Throws: + /// How the thrown error will be handled by the runtime: + /// - An invocation error will be reported if the error is thrown before the first call to + /// ``LambdaResponseStreamWriter.write(_:)``. + /// - If the error is thrown after call(s) to ``LambdaResponseStreamWriter.write(_:)`` but before + /// a call to ``LambdaResponseStreamWriter.finish()``, the response stream will be closed and trailing + /// headers will be sent. + /// - If ``LambdaResponseStreamWriter.finish()`` has already been called before the error is thrown, the + /// error will be logged. + mutating func handle(_ event: ByteBuffer, responseWriter: some LambdaResponseStreamWriter, context: LambdaContext) async throws +} +``` + +Using this protocol requires the `handle` method to receive the incoming event as a `ByteBuffer` and return the output +as a `ByteBuffer` too. + +Through the `LambdaResponseStreamWriter`, which is passed as an argument in the `handle` function, the **response can be +streamed** by calling the `write(_:)` function of the `LambdaResponseStreamWriter` with partial data repeatedly before +finally closing the response stream by calling `finish()`. Users can also choose to return the entire output and not +stream the response by calling `writeAndFinish(_:)`. + +This protocol also allows for background tasks to be run after a result has been reported to the AWS Lambda control +plane, since the `handle(...)` function is free to implement any background work after the call to +`responseWriter.finish()`. + +The protocol is defined in a way that supports a broad range of use-cases. The handle method is marked as `mutating` to +allow handlers to be implemented with a `struct`. + +An implementation that sends the number 1 to 10 every 500ms could look like this: + +```swift +struct SendNumbersWithPause: StreamingLambdaHandler { + func handle( + _ event: ByteBuffer, + responseWriter: some LambdaResponseStreamWriter, + context: LambdaContext + ) async throws { + for i in 1...10 { + // Send partial data + responseWriter.write(ByteBuffer(string: #"\#(i)\n\r"#)) + // Perform some long asynchronous work + try await Task.sleep(for: .milliseconds(500)) + } + // All data has been sent. Close off the response stream. + responseWriter.finish() + } +} +``` + +#### LambdaHandler: + +This handler protocol will be the go-to choice for most use-cases because it is completely agnostic to any +encoding/decoding logic -- conforming objects simply have to implement the `handle` function where the input and return +types are Swift objects. + +Note that the `handle` function does not receive a `LambdaResponseStreamWriter` as an argument. Response streaming is +not viable for `LambdaHandler` because the output has to be encoded prior to it being sent, e.g. it is not possible to +encode a partial/incomplete JSON string. + +```swift +public protocol LambdaHandler { + /// Generic input type + /// The body of the request sent to Lambda will be decoded into this type for the handler to consume + associatedtype Event + /// Generic output type + /// This is the return type of the handle() function. + associatedtype Output + + /// The business logic of the Lambda function. Receives a generic input type and returns a generic output type. + /// Agnostic to encoding/decoding + mutating func handle(_ event: Event, context: LambdaContext) async throws -> Output +} +``` + +#### LambdaWithBackgroundProcessingHandler: + +This protocol is exactly like `LambdaHandler`, with the only difference being the added support for executing background +work after the result has been sent to the AWS Lambda control plane. + +This is achieved by not having a return type in the `handle` function. The output is instead written into a +`LambdaResponseWriter` that is passed in as an argument, meaning that the `handle` function is then free to implement +any background work after the result has been sent to the AWS Lambda control plane. + +`LambdaResponseWriter` has different semantics to the `LambdaResponseStreamWriter`. Where the `write(_:)` function of +`LambdaResponseStreamWriter` means writing into a response stream, the `write(_:)` function of `LambdaResponseWriter` +simply serves as a mechanism to return the output without explicitly returning from the `handle` function. + +```swift +public protocol LambdaResponseWriter { + associatedtype Output + + /// Sends the generic Output object (representing the computed result of the handler) + /// to the AWS Lambda response endpoint. + /// An error will be thrown if this function is called more than once. + func write(_: Output) async throws +} + +public protocol LambdaWithBackgroundProcessingHandler { + /// Generic input type + /// The body of the request sent to Lambda will be decoded into this type for the handler to consume + associatedtype Event + /// Generic output type + /// This is the type that the handle() function will send through the ``LambdaResponseWriter``. + associatedtype Output + + /// The business logic of the Lambda function. Receives a generic input type and returns a generic output type. + /// Agnostic to JSON encoding/decoding + func handle( + _ event: Event, + outputWriter: some LambdaResponseWriter, + context: LambdaContext + ) async throws +} +``` + +##### Example Usage: + +```swift +struct BackgroundProcessingHandler: LambdaWithBackgroundProcessingHandler { + struct Input: Decodable { + let message: String + } + + struct Greeting: Encodable { + let echoedMessage: String + } + + typealias Event = Input + typealias Output = Greeting + + func handle( + _ event: Event, + outputWriter: some LambdaResponseWriter, + context: LambdaContext + ) async throws { + // Return result to the Lambda control plane + try await outputWriter.write(result: Greeting(echoedMessage: event.messageToEcho)) + + // Perform some background work, e.g: + try await Task.sleep(for: .seconds(10)) + + // Exit the function. All asynchronous work has been executed before exiting the scope of this function. + // Follows structured concurrency principles. + return + } +} +``` + +#### Handler Adapters + +Since the `StreamingLambdaHandler` protocol is the base protocol the `LambdaRuntime` works with, there are adapters to +make both `LambdaHandler` and `LambdaWithBackgroundProcessingHandler` compatible with `StreamingLambdaHandler`. + +1. `LambdaHandlerAdapter` accepts a `LambdaHandler` and conforms it to `LambdaWithBackgroundProcessingHandler`. This is + achieved by taking the generic `Output` object returned from the `handle` function of `LambdaHandler` and passing it + to the `write(_:)` function of the `LambdaResponseWriter`. + +2. `LambdaCodableAdapter` accepts a `LambdaWithBackgroundProcessingHandler` and conforms it to `StreamingLambdaHandler`. + This is achieved by wrapping the `LambdaResponseWriter` with the `LambdaResponseStreamWriter` provided by + `StreamingLambdaHandler`. A call to the `write(_:)` function of `LambdaResponseWriter` is translated into a call to + the `writeAndFinish(_:)` function of `LambdaResponseStreamWriter`. + +Both `LambdaHandlerAdapter` and `LambdaCodableAdapter` are described in greater detail in the **Codable Support** +section. + +To summarize, `LambdaHandler` can be used with the `LambdaRuntime` by first going through `LambdaHandlerAdapter` and +then through `LambdaCodableAdapter`. `LambdaWithBackgroundHandler` just requires `LambdaCodableAdapter`. + +For the common JSON-in and JSON-out use-case, there is an extension on `LambdaRuntime` that abstracts away this wrapping +from the user. + +### LambdaRuntime + +`LambdaRuntime` is the class that communicates with the Lambda control plane as defined in +[Building a custom runtime for AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html) and +forward the invocations to the provided `StreamingLambdaHandler`. It will conform to `ServiceLifecycle.Service` to +provide support for `swift-service-lifecycle`. + +```swift +/// The LambdaRuntime object. This object communicates with the Lambda control plane +/// to fetch work and report errors. +public final class LambdaRuntime: ServiceLifecycle.Service, Sendable + where Handler: StreamingLambdaHandler +{ + + /// Create a LambdaRuntime by passing a handler, an eventLoop and a logger. + /// - Parameter handler: A ``StreamingLambdaHandler`` that will be invoked + /// - Parameter eventLoop: An ``EventLoop`` on which the LambdaRuntime will be + /// executed. Defaults to an EventLoop from + /// ``NIOSingletons.posixEventLoopGroup``. + /// - Parameter logger: A logger + public init( + handler: sending Handler, + eventLoop: EventLoop = Lambda.defaultEventLoop, + logger: Logger = Logger(label: "Lambda") + ) + + /// Create a LambdaRuntime by passing a ``StreamingLambdaHandler``. + public convenience init(handler: sending Handler) + + /// Starts the LambdaRuntime by connecting to the Lambda control plane to ask + /// for events to process. If the environment variable AWS_LAMBDA_RUNTIME_API is + /// set, the LambdaRuntime will connect to the Lambda control plane. Otherwise + /// it will start a mock server that can be used for testing at port 8080 + /// locally. + /// Cancel the task that runs this function to close the communication with + /// the Lambda control plane or close the local mock server. This function + /// only returns once cancelled. + public func run() async throws +} +``` + +The current API allows for a Lambda function to be tested locally through a mock server by requiring an environment +variable named `LOCAL_LAMBDA_SERVER_ENABLED` to be set to `true`. If this environment variable is not set, the program +immediately crashes as the user will not have the `AWS_LAMBDA_RUNTIME_API` environment variable on their local machine +(set automatically when deployed to AWS Lambda). However, making the user set the `LOCAL_LAMBDA_SERVER_ENABLED` +environment variable is an unnecessary step that can be avoided. In the v2 API, the `run()` function will automatically +start the mock server when the `AWS_LAMBDA_RUNTIME_API` environment variable cannot be found. + +### Lambda + +We also add an enum to store a static function and a property on. We put this on the static `Lambda` because +`LambdaRuntime` is generic and thus has bad ergonomics for static properties and functions. + +```swift +enum Lambda { + /// This returns the default EventLoop that a LambdaRuntime is scheduled on. + /// It uses `NIOSingletons.posixEventLoopGroup.next()` under the hood. + public static var defaultEventLoop: any EventLoop { get } + + /// Report a startup error to the Lambda Control Plane API + public static func reportStartupError(any Error) async +} +``` + +Since the library now provides ownership of the `main()` function and allows users to initialize services before the +`LambdaRuntime` is initialized, the library cannot implicitly report +[errors that occur during initialization to the dedicated endpoint AWS exposes](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html#runtimes-api-initerror) +like it currently does through the `initialize()` function of `LambdaRunner` which wraps the handler's `init(...)` and +handles any errors thrown by reporting it to the dedicated AWS endpoint. + +To retain support for initialization error reporting, the `Lambda.reportStartupError(any Error)` function gives users +the option to manually report initialization errors in their closure handler. Although this should ideally happen +implicitly like it currently does in v1, we believe this is a small compromise in comparison to the benefits gained in +now being able to cleanly manage the lifecycles of required services in a structured concurrency manner. + +> Use-case: +> +> Assume we want to load a secret for the Lambda function from a secret vault first. If this fails, we want to report +> the error to the control plane: +> +> ```swift +> let secretVault = SecretVault() +> +> do { +> /// !!! Error thrown: secret "foo" does not exist !!! +> let secret = try await secretVault.getSecret("foo") +> +> let runtime = LambdaRuntime { (event: Input, context: LambdaContext) in +> /// Lambda business logic +> } +> +> let serviceGroup = ServiceGroup( +> services: [postgresClient, runtime], +> configuration: .init(gracefulShutdownSignals: [.sigterm]), +> logger: logger +> ) +> try await serviceGroup.run() +> } catch { +> /// Report startup error straight away to the dedicated initialization error endpoint +> try await Lambda.reportStartupError(error) +> } +> ``` + +### Codable support + +The `LambdaHandler` and `LambdaWithBackgroundProcessingHandler` protocols abstract away encoding/decoding logic from the +conformers as they are generic over custom `Event` and `Output` types. We introduce two adapters `LambdaHandlerAdapter` +and `CodableLambdaAdapter` that implement the encoding/decoding logic and in turn allow the respective handlers to +conform to `StreamingLambdaHandler`. + +#### LambdaHandlerAdapter + +Any handler conforming to `LambdaHandler` can be conformed to `LambdaWithBackgroundProcessingHandler` through +`LambdaHandlerAdapter`. + +```swift +/// Wraps an underlying handler conforming to ``LambdaHandler`` +/// with ``LambdaWithBackgroundProcessingHandler``. +public struct LambdaHandlerAdapter< + Event: Decodable, + Output, + Handler: LambdaHandler +>: LambdaWithBackgroundProcessingHandler where Handler.Event == Event, Handler.Output == Output { + let handler: Handler + + /// Register the concrete handler. + public init(handler: Handler) + + /// 1. Call the `self.handler.handle(...)` with `event` and `context`. + /// 2. Pass the generic `Output` object returned from `self.handler.handle(...)` to `outputWriter.write(_:)` + public func handle(_ event: Event, outputWriter: some LambdaResponseWriter, context: LambdaContext) async throws +} +``` + +#### LambdaCodableAdapter + +`LambdaCodableAdapter` accepts any generic underlying handler conforming to `LambdaWithBackgroundProcessingHandler`. It +also accepts _any_ encoder and decoder object conforming to the `LambdaEventDecoder` and `LambdaOutputEncoder` +protocols: + +##### LambdaEventDecoder and LambdaOutputEncoder protocols + +```swift +public protocol LambdaEventDecoder { + /// Decode the ByteBuffer representing the received event into the generic type Event + /// the handler will receive + func decode(_ type: Event.Type, from buffer: ByteBuffer) throws -> Event +} + +public protocol LambdaOutputEncoder { + /// Encode the generic type Output the handler has produced into a ByteBuffer + func encode(_ value: Output, into buffer: inout ByteBuffer) throws +} +``` + +We provide conformances for Foundation's `JSONDecoder` to `LambdaEventDecoder` and `JSONEncoder` to +`LambdaOutputEncoder`. + +`LambdaCodableAdapter` implements its `handle()` method by: + +1. Decoding the `ByteBuffer` event into the generic `Event` type. +2. Wrapping the `LambdaResponseStreamWriter` with a concrete `LambdaResponseWriter` such that calls to + `LambdaResponseWriter`s `write(_:)` are mapped to `LambdaResponseStreamWriter`s `writeAndFinish(_:)`. + - Note that the argument to `LambdaResponseWriter`s `write(_:)` is a generic `Output` object whereas + `LambdaResponseStreamWriter`s `writeAndFinish(_:)` requires a `ByteBuffer`. + - Therefore, the concrete implementation of `LambdaResponseWriter` also accepts an encoder. Its `write(_:)` function + first encodes the generic `Output` object and then passes it to the underlying `LambdaResponseStreamWriter`. +3. Passing the generic `Event` instance, the concrete `LambdaResponseWriter`, as well as the `LambdaContext` to the + underlying handler's `handle()` method. + +`LambdaCodableAdapter` can implement encoding/decoding for _any_ handler conforming to +`LambdaWithBackgroundProcessingHandler` if `Event` is `Decodable` and the `Output` is `Encodable` or `Void`, meaning +that the encoding/decoding stubs do not need to be implemented by the user. + +```swift +/// Wraps an underlying handler conforming to `LambdaWithBackgroundProcessingHandler` +/// with encoding/decoding logic +public struct LambdaCodableAdapter< + Handler: LambdaWithBackgroundProcessingHandler, + Event: Decodable, + Output, + Decoder: LambdaEventDecoder, + Encoder: LambdaOutputEncoder +>: StreamingLambdaHandler where Handler.Output == Output, Handler.Event == Event { + + /// Register the concrete handler, encoder, and decoder. + public init( + handler: Handler, + encoder: Encoder, + decoder: Decoder + ) where Output: Encodable + + /// For handler with a void output -- the user doesn't specify an encoder. + public init( + handler: Handler, + decoder: Decoder + ) where Output == Void, Encoder == VoidEncoder + + /// 1. Decode the invocation event using `self.decoder` + /// 2. Create a concrete `LambdaResponseWriter` that maps calls to `write(_:)` with the `responseWriter`s `writeAndFinish(_:)` + /// 2. Call the underlying `self.handler.handle()` method with the decoded event data, the concrete `LambdaResponseWriter`, + /// and the `LambdaContext`. + public mutating func handle( + _ request: ByteBuffer, + responseWriter: some LambdaResponseStreamWriter, + context: LambdaContext + ) async throws +} +``` + +### Handler as a Closure + +To create a Lambda function using the current API, a user first has to create an object and conform it to one of the +handler protocols by implementing the initializer and the `handle(...)` function. Now that `LambdaRuntime` is public, +this verbosity can very easily be simplified. + +#### ClosureHandler + +This handler is generic over any `Event` type conforming to `Decodable` and any `Output` type conforming to `Encodable` +or `Void`. + +```swift +public struct ClosureHandler: LambdaHandler { + /// Initialize with a closure handler over generic Input and Output types + public init(body: @escaping (Event, LambdaContext) async throws -> Output) where Output: Encodable + /// Initialize with a closure handler over a generic Input type (Void Output). + public init(body: @escaping (Event, LambdaContext) async throws -> Void) where Output == Void + /// The business logic of the Lambda function. + public func handle(_ event: Event, context: LambdaContext) async throws -> Output +} +``` + +Given that `ClosureHandler` conforms to `LambdaHandler`: + +1. We can extend the `LambdaRuntime` initializer such that it accepts a closure as an argument. +2. Within the initializer, the closure handler is wrapped with `LambdaCodableAdapter`. + +```swift +extension LambdaRuntime { + /// Initialize a LambdaRuntime with a closure handler over generic Event and Output types. + /// This initializer bolts on encoding/decoding logic by wrapping the closure handler with + /// LambdaCodableAdapter. + public init( + body: @escaping (Event, LambdaContext) async throws -> Output + ) where Handler == LambdaCodableAdapter, Event, Output, JSONDecoder, JSONEncoder> + + /// Same as above but for handlers with a void output + public init( + body: @escaping (Event, LambdaContext) async throws -> Void + ) where Handler == LambdaCodableAdapter, Event, Void, JSONDecoder, VoidEncoder> +} +``` + +We can now significantly reduce the verbosity and leverage Swift's trailing closure syntax to cleanly create and run a +Lambda function, abstracting away the decoding and encoding logic from the user: + +```swift +/// The type the handler will use as input +struct Input: Decodable { + var message: String +} + +/// The type the handler will output +struct Greeting: Encodable { + var echoedMessage: String +} + +/// A simple Lambda function that echoes the input +let runtime = LambdaRuntime { (event: Input, context: LambdaContext) in + Greeting(echoedMessage: event.message) +} + +try await runtime.run() +``` + +We also add a `StreamingClosureHandler` conforming to `StreamingLambdaHandler` for use-cases where the user wants to +handle encoding/decoding themselves: + +```swift +public struct StreamingClosureHandler: StreamingLambdaHandler { + + public init( + body: @escaping sending (ByteBuffer, LambdaResponseStreamWriter, LambdaContext) async throws -> () + ) + + public func handle( + _ request: ByteBuffer, + responseWriter: LambdaResponseStreamWriter, + context: LambdaContext + ) async throws +} + +extension LambdaRuntime { + public init( + body: @escaping sending (ByteBuffer, LambdaResponseStreamWriter, LambdaContext) async throws -> () + ) +} +``` + +## Alternatives considered + +### [UInt8] instead of ByteBuffer + +We considered using `[UInt8]` instead of `ByteBuffer` in the base `LambdaHandler` API. We decided to use `ByteBuffer` +for two reasons. + +1. 99% of use-cases will use the JSON codable API and will not directly get in touch with ByteBuffer anyway. For those + users it does not matter if the base API uses `ByteBuffer` or `[UInt8]`. +2. The incoming and outgoing data must be in the `ByteBuffer` format anyway, as Lambda uses SwiftNIO under the hood and + SwiftNIO uses `ByteBuffer` in its APIs. By using `ByteBuffer` we can save a copies to and from `[UInt8]`. This will + reduce the invocation time for all users. +3. The base `LambdaHandler` API is most likely mainly being used by developers that want to integrate their web + framework with Lambda (examples: Vapor, Hummingbird, ...). Those developers will most likely prefer to get the data + in the `ByteBuffer` format anyway, as their lower level networking stack also depends on SwiftNIO. + +### Users create a LambdaResponse, that supports streaming instead of being passed a LambdaResponseStreamWriter + +Instead of passing the `LambdaResponseStreamWriter` in the invocation we considered a new type `LambdaResponse`, that +users must return in the `StreamingLambdaHandler`. + +Its API would look like this: + +```swift +/// A response returned from a ``LambdaHandler``. +/// The response can be empty, a single ByteBuffer or a response stream. +public struct LambdaResponse { + /// A writer to be used when creating a streamed response. + public struct Writer { + /// Writes data to the response stream + public func write(_ byteBuffer: ByteBuffer) async throws + /// Closes off the response stream + public func finish() async throws + /// Writes the `byteBuffer` to the response stream and subsequently closes the stream + public func writeAndFinish(_ byteBuffer: ByteBuffer) async throws + } + + /// Creates an empty lambda response + public init() + + /// Creates a LambdaResponse with a fixed ByteBuffer. + public init(_ byteBuffer: ByteBuffer) + + /// Creates a streamed lambda response. Use the ``Writer`` to send + /// response chunks on the stream. + public init(_ stream: @escaping sending (Writer) async throws -> ()) +} +``` + +The `StreamingLambdaHandler` would look like this: + +```swift +/// The base LambdaHandler protocol +public protocol StreamingLambdaHandler { + /// The business logic of the Lambda function + /// - Parameters: + /// - event: The invocation's input data + /// - context: The LambdaContext containing the invocation's metadata + /// - Returns: A LambdaResponse, that can be streamed + mutating func handle( + _ event: ByteBuffer, + context: LambdaContext + ) async throws -> LambdaResponse +} +``` + +There are pros and cons for the API that returns the `LambdaResponses` and there are pros and cons for the API that +receives a `LambdaResponseStreamWriter` as a parameter. + +Concerning following structured concurrency principles the approach that receives a `LambdaResponseStreamWriter` as a +parameter has benefits as the lifetime of the handle function is tied to the invocation runtime. The approach that +returns a `LambdaResponse` splits the invocation into two separate function calls. First the handle method is invoked, +second the `LambdaResponse` writer closure is invoked. This means that it is impossible to use Swift APIs that use +`with` style lifecycle management patterns from before creating the response until sending the full response stream off. +For example, users instrumenting their lambdas with Swift tracing likely can not use the `withSpan` API for the full +lifetime of the request, if they return a streamed response. + +However, if it comes to consistency with the larger Swift on server ecosystem, the API that returns a `LambdaResponse` +is likely the better choice. Hummingbird v2, OpenAPI and the new Swift gRPC v2 implementation all use this approach. +This might be due to the fact that writing middleware becomes easier, if a Response is explicitly returned. + +We decided to implement the approach in which a `LambdaResponseStreamWriter` is passed to the function, since the +approach in which a `LambdaResponse` is returned can trivially be built on top of it. This is not true vice versa. + +We welcome the discussion on this topic and are open to change our minds and API here. + +### Adding a function `addBackgroundTask(_ body: sending @escaping () async -> ())` in `LambdaContext` + +Initially we proposed an explicit `addBackgroundTask(_:)` function in `LambdaContext` that users could call from their +handler object to schedule a background task to be run after the result is reported to AWS. We received feedback that +this approach for supporting background tasks does not exhibit structured concurrency, as code could still be in +execution after leaving the scope of the `handle(...)` function. + +For handlers conforming to the `StreamingLambdaHandler`, `addBackgroundTask(_:)` was anyways unnecessary as background +work could be executed in a structured concurrency manner within the `handle(...)` function after the call to +`LambdaResponseStreamWriter.finish()`. + +For handlers conforming to the `LambdaHandler` protocol, we considered extending `LambdaHandler` with a +`performPostHandleWork(...)` function that will be called after the `handle` function by the library. Users wishing to +add background work can override this function in their `LambdaHandler` conforming object. + +```swift +public protocol LambdaHandler { + associatedtype Event + associatedtype Output + + func handle(_ event: Event, context: LambdaContext) async throws -> Output + + func performPostHandleWork(...) async throws -> Void +} + +extension LambdaHandler { + // User's can override this function if they wish to perform background work + // after returning a response from ``handle``. + func performPostHandleWork(...) async throws -> Void { + // nothing to do + } +} +``` + +Yet this poses difficulties when the user wishes to use any state created in the `handle(...)` function as part of the +background work. + +In general, the most common use-case for this library will be to implement simple Lambda functions that do not have +requirements for response streaming, nor to perform any background work after returning the output. To keep things easy +for the common use-case, and with Swift's principle of progressive disclosure of complexity in mind, we settled on three +handler protocols: + +1. `LambdaHandler`: Most common use-case. JSON-in, JSON-out. Does not support background work execution. An intuitive + `handle(event: Event, context: LambdaContext) -> Output` API that is simple to understand, i.e. users are not exposed + to the concept of sending their response through a writer. `LambdaHandler` can be very cleanly implemented and used + with `LambdaRuntime`, especially with `ClosureHandler`. +2. `LambdaWithBackgroundProcessingHandler`: If users wish to augment their `LambdaHandler` with the ability to run + background tasks, they can easily migrate. A user simply has to: + 1. Change the conformance to `LambdaWithBackgroundProcessingHandler`. + 2. Add an additional `outputWriter: some LambdaResponseWriter` argument to the `handle` function. + 3. Replace the `return ...` with `outputWriter.write(...)`. + 4. Implement any background work after `outputWriter.write(...)`. +3. `StreamingLambdaHandler`: This is the base handler protocol which is intended to be used directly only for advanced + use-cases. Users are provided the invocation event as a `ByteBuffer` and a `LambdaResponseStreamWriter` where the + computed result (as `ByteBuffer`) can either be streamed (with repeated calls to `write(_:)`) or sent all at once + (with a single call to `writeAndFinish(_:)`). After closing the `LambdaResponseStreamWriter`, any background work can + be implemented. + +### Making LambdaResponseStreamWriter and LambdaResponseWriter ~Copyable + +We initially proposed to make the `LambdaResponseStreamWriter` and `LambdaResponseWriter` protocols `~Copyable`, with +the functions that close the response having the `consuming` ownership keyword. This was so that the compiler could +enforce the restriction of not being able to interact with the writer after the response stream has closed. + +However, non-copyable types do not compose nicely and add complexity for users. Further, for the compiler to actually +enforce the `consuming` restrictions, user's have to explicitly mark the writer argument as `consuming` in the `handle` +function. + +Therefore, throwing appropriate errors to prevent abnormal interaction with the writers seems to be the simplest +approach. + +## A word about versioning + +We are aware that AWS Lambda Runtime has not reached a proper 1.0. We intend to keep the current implementation around +at 1.0-alpha. We don't want to change the current API without releasing a new major. We think there are lots of adopters +out there that depend on the API in v1. Because of this we intend to release the proposed API here as AWS Lambda Runtime +v2. From 3dbe568e6979405814062e835e80853a9d0b7f2f Mon Sep 17 00:00:00 2001 From: Fabian Fett Date: Wed, 9 Oct 2024 19:57:58 +0200 Subject: [PATCH 053/177] Opt in more targets to swift 6 language mode (#401) --- Package.swift | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Package.swift b/Package.swift index eb78f9f9..69f5ff36 100644 --- a/Package.swift +++ b/Package.swift @@ -67,16 +67,14 @@ let package = Package( .byName(name: "AWSLambdaRuntimeCore"), .product(name: "NIOTestUtils", package: "swift-nio"), .product(name: "NIOFoundationCompat", package: "swift-nio"), - ], - swiftSettings: [.swiftLanguageMode(.v5)] + ] ), .testTarget( name: "AWSLambdaRuntimeTests", dependencies: [ .byName(name: "AWSLambdaRuntimeCore"), .byName(name: "AWSLambdaRuntime"), - ], - swiftSettings: [.swiftLanguageMode(.v5)] + ] ), // testing helper .target( From 65061a638c19f1a2757892350172897b06772d0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Thu, 10 Oct 2024 11:16:12 +0200 Subject: [PATCH 054/177] Remove docker compose files + add GH action to compile examples during CI (#397) * add GH action to compile examples on PR * remove old docker infrastructure --------- Co-authored-by: Fabian Fett --- .github/workflows/examples_matrix.yml | 60 +++++++++++++++++++++++++++ .github/workflows/pull_request.yml | 9 ++++ docker/Dockerfile | 20 --------- docker/docker-compose.al2.510.yaml | 18 -------- docker/docker-compose.al2.57.yaml | 18 -------- docker/docker-compose.al2.58.yaml | 18 -------- docker/docker-compose.al2.59.yaml | 18 -------- docker/docker-compose.al2.main.yaml | 18 -------- docker/docker-compose.yaml | 51 ----------------------- scripts/integration_tests.sh | 34 +++++++++++++++ 10 files changed, 103 insertions(+), 161 deletions(-) create mode 100644 .github/workflows/examples_matrix.yml delete mode 100644 docker/Dockerfile delete mode 100644 docker/docker-compose.al2.510.yaml delete mode 100644 docker/docker-compose.al2.57.yaml delete mode 100644 docker/docker-compose.al2.58.yaml delete mode 100644 docker/docker-compose.al2.59.yaml delete mode 100644 docker/docker-compose.al2.main.yaml delete mode 100644 docker/docker-compose.yaml create mode 100755 scripts/integration_tests.sh diff --git a/.github/workflows/examples_matrix.yml b/.github/workflows/examples_matrix.yml new file mode 100644 index 00000000..39ec1d26 --- /dev/null +++ b/.github/workflows/examples_matrix.yml @@ -0,0 +1,60 @@ +name: ExamplesMatrix + +on: + workflow_call: + inputs: + name: + type: string + description: "The name of the workflow used for the concurrency group." + required: true + # examples: + # type: sequence + # description: "The examples to run." + # required: true + matrix_linux_command: + type: string + description: "The command of the current Swift version linux matrix job to execute." + required: true + matrix_linux_swift_container_image: + type: string + description: "Container image for the matrix job. Defaults to matching latest Swift Ubuntu image." + default: "swift:latest" + +## We are cancelling previously triggered workflow runs +concurrency: + group: ${{ github.workflow }}-${{ github.ref }}-${{ inputs.name }} + cancel-in-progress: true + +jobs: + linux: + name: Example/${{ matrix.examples }} on Linux ${{ matrix.swift.swift_version }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + # This should be passed as an argument in input. Can we pass arrays as argument ? + examples : [ "HelloWorld", "APIGateway" ] + # examples: ${{ inputs.examples }} + + # We are using only one Swift version + swift: + - image: ${{ inputs.matrix_linux_swift_container_image }} + swift_version: "6.0.1-noble" + container: + image: ${{ matrix.swift.image }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + persist-credentials: false + - name: Mark the workspace as safe + # https://github.com/actions/checkout/issues/766 + run: git config --global --add safe.directory ${GITHUB_WORKSPACE} + - name: Run matrix job + env: + SWIFT_VERSION: ${{ matrix.swift.swift_version }} + COMMAND: ${{ inputs.matrix_linux_command }} + EXAMPLE: ${{ matrix.examples }} + run: | + apt-get -qq update && apt-get -qq -y install curl + ./scripts/integration_tests.sh \ No newline at end of file diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index f7522664..77f9a5af 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -24,6 +24,15 @@ jobs: linux_nightly_6_0_arguments_override: "--explicit-target-dependency-import-check error" linux_nightly_main_arguments_override: "--explicit-target-dependency-import-check error" + integration-tests: + name: Integration Tests + uses: ./.github/workflows/examples_matrix.yml + with: + # We should pass the list of examples here, but we can't pass an array as argument + # examples: [ "HelloWorld", "APIGateway" ] + name: "Integration tests" + matrix_linux_command: "LAMBDA_USE_LOCAL_DEPS=../.. swift build" + swift-6-language-mode: name: Swift 6 Language Mode uses: apple/swift-nio/.github/workflows/swift_6_language_mode.yml@main diff --git a/docker/Dockerfile b/docker/Dockerfile deleted file mode 100644 index ec97cef2..00000000 --- a/docker/Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -ARG swift_version=5.7 -ARG base_image=swift:$swift_version-amazonlinux2 -FROM $base_image -# needed to do again after FROM due to docker limitation -ARG swift_version - -# dependencies -RUN yum install -y wget perl-Digest-SHA -RUN yum install -y lsof dnsutils netcat-openbsd net-tools curl jq # used by integration tests - -# tools -RUN mkdir -p $HOME/.tools -RUN echo 'export PATH="$HOME/.tools:$PATH"' >> $HOME/.profile - -# swiftformat (until part of the toolchain) - -ARG swiftformat_version=0.50.1 -RUN git clone --branch $swiftformat_version --depth 1 https://github.com/nicklockwood/SwiftFormat $HOME/.tools/swift-format -RUN cd $HOME/.tools/swift-format && swift build -c release -RUN ln -s $HOME/.tools/swift-format/.build/release/swiftformat $HOME/.tools/swiftformat diff --git a/docker/docker-compose.al2.510.yaml b/docker/docker-compose.al2.510.yaml deleted file mode 100644 index a897f987..00000000 --- a/docker/docker-compose.al2.510.yaml +++ /dev/null @@ -1,18 +0,0 @@ -version: "3" - -services: - - runtime-setup: - image: swift-aws-lambda:al2-5.10 - build: - args: - base_image: "swiftlang/swift:nightly-5.10-amazonlinux2" - - test: - image: swift-aws-lambda:al2-5.10 - - test-examples: - image: swift-aws-lambda:al2-5.10 - - shell: - image: swift-aws-lambda:al2-5.10 diff --git a/docker/docker-compose.al2.57.yaml b/docker/docker-compose.al2.57.yaml deleted file mode 100644 index 1b19f1f0..00000000 --- a/docker/docker-compose.al2.57.yaml +++ /dev/null @@ -1,18 +0,0 @@ -version: "3" - -services: - - runtime-setup: - image: swift-aws-lambda:al2-5.7 - build: - args: - swift_version: "5.7" - - test: - image: swift-aws-lambda:al2-5.7 - - test-examples: - image: swift-aws-lambda:al2-5.7 - - shell: - image: swift-aws-lambda:al2-5.7 diff --git a/docker/docker-compose.al2.58.yaml b/docker/docker-compose.al2.58.yaml deleted file mode 100644 index 6127c65c..00000000 --- a/docker/docker-compose.al2.58.yaml +++ /dev/null @@ -1,18 +0,0 @@ -version: "3" - -services: - - runtime-setup: - image: swift-aws-lambda:al2-5.8 - build: - args: - swift_version: "5.8" - - test: - image: swift-aws-lambda:al2-5.8 - - test-examples: - image: swift-aws-lambda:al2-5.8 - - shell: - image: swift-aws-lambda:al2-5.8 diff --git a/docker/docker-compose.al2.59.yaml b/docker/docker-compose.al2.59.yaml deleted file mode 100644 index edea9327..00000000 --- a/docker/docker-compose.al2.59.yaml +++ /dev/null @@ -1,18 +0,0 @@ -version: "3" - -services: - - runtime-setup: - image: swift-aws-lambda:al2-5.9 - build: - args: - swift_version: "5.9" - - test: - image: swift-aws-lambda:al2-5.9 - - test-examples: - image: swift-aws-lambda:al2-5.9 - - shell: - image: swift-aws-lambda:al2-5.9 diff --git a/docker/docker-compose.al2.main.yaml b/docker/docker-compose.al2.main.yaml deleted file mode 100644 index b2f890c1..00000000 --- a/docker/docker-compose.al2.main.yaml +++ /dev/null @@ -1,18 +0,0 @@ -version: "3" - -services: - - runtime-setup: - image: swift-aws-lambda:al2-main - build: - args: - base_image: "swiftlang/swift:nightly-main-amazonlinux2" - - test: - image: swift-aws-lambda:al2-main - - test-examples: - image: swift-aws-lambda:al2-main - - shell: - image: swift-aws-lambda:al2-main diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml deleted file mode 100644 index 32507dcf..00000000 --- a/docker/docker-compose.yaml +++ /dev/null @@ -1,51 +0,0 @@ -# this file is not designed to be run directly -# instead, use the docker-compose.. files -# eg docker-compose -f docker/docker-compose.yaml -f docker/docker-compose.al2.57.yaml run test -version: "3" - -services: - - runtime-setup: - image: swift-aws-lambda:default - build: - context: . - dockerfile: Dockerfile - - common: &common - image: swift-aws-lambda:default - depends_on: [runtime-setup] - volumes: - - ~/.ssh:/root/.ssh - - ..:/code:z - working_dir: /code - cap_drop: - - CAP_NET_RAW - - CAP_NET_BIND_SERVICE - - soundness: - <<: *common - command: /bin/bash -cl "./scripts/soundness.sh" - - test: - <<: *common - command: /bin/bash -cl "swift test -Xswiftc -warnings-as-errors $${SANITIZER_ARG-}" - - test-examples: - <<: *common - command: >- - /bin/bash -clx " - LAMBDA_USE_LOCAL_DEPS=true swift build --package-path Examples/Benchmark && - LAMBDA_USE_LOCAL_DEPS=true swift build --package-path Examples/Deployment && - LAMBDA_USE_LOCAL_DEPS=true swift build --package-path Examples/Echo && - LAMBDA_USE_LOCAL_DEPS=true swift build --package-path Examples/ErrorHandling && - LAMBDA_USE_LOCAL_DEPS=true swift build --package-path Examples/Foundation && - LAMBDA_USE_LOCAL_DEPS=true swift build --package-path Examples/JSON && - LAMBDA_USE_LOCAL_DEPS=true swift build --package-path Examples/LocalDebugging/MyLambda && - LAMBDA_USE_LOCAL_DEPS=true swift test --package-path Examples/Testing - " - - # util - - shell: - <<: *common - entrypoint: /bin/bash -l diff --git a/scripts/integration_tests.sh b/scripts/integration_tests.sh new file mode 100755 index 00000000..232d743d --- /dev/null +++ b/scripts/integration_tests.sh @@ -0,0 +1,34 @@ +#!/bin/bash +##===----------------------------------------------------------------------===## +## +## This source file is part of the SwiftAWSLambdaRuntime open source project +## +## Copyright (c) 2017-2018 Apple Inc. and the SwiftAWSLambdaRuntime project authors +## Licensed under Apache License v2.0 +## +## See LICENSE.txt for license information +## See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +## +## SPDX-License-Identifier: Apache-2.0 +## +##===----------------------------------------------------------------------===## + +set -euo pipefail + +log() { printf -- "** %s\n" "$*" >&2; } +error() { printf -- "** ERROR: %s\n" "$*" >&2; } +fatal() { error "$@"; exit 1; } + +test -n "${SWIFT_VERSION:-}" || fatal "SWIFT_VERSION unset" +test -n "${COMMAND:-}" || fatal "COMMAND unset" +test -n "${EXAMPLE:-}" || fatal "EXAMPLE unset" +swift_version="$SWIFT_VERSION" +command="$COMMAND" +example="$EXAMPLE" + +pushd Examples/"$example" > /dev/null + +log "Running command with Swift $SWIFT_VERSION" +eval "$command" + +popd From bb9ddfb5557aca5f6f0d6efe2234ba089bf58b89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Thu, 10 Oct 2024 11:31:14 +0200 Subject: [PATCH 055/177] do not force unwrap stdout (#398) * do not force unwrap Revert a change from #d2bd7f1aae1fc9455b208567ba5d85e42463c82c that caused the plugin to crash * test stdout for nil --------- Co-authored-by: Fabian Fett --- Plugins/AWSLambdaPackager/PluginUtils.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/AWSLambdaPackager/PluginUtils.swift b/Plugins/AWSLambdaPackager/PluginUtils.swift index 11827200..e12e09dd 100644 --- a/Plugins/AWSLambdaPackager/PluginUtils.swift +++ b/Plugins/AWSLambdaPackager/PluginUtils.swift @@ -32,7 +32,7 @@ struct Utils { let fd = dup(1) let stdout = fdopen(fd, "rw") - defer { fclose(stdout!) } + defer { if let so = stdout { fclose(so) } } // We need to use an unsafe transfer here to get the fd into our Sendable closure. // This transfer is fine, because we write to the variable from a single SerialDispatchQueue here. From b4673d264b73fc3858d520e6dc04dc779862508c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Thu, 10 Oct 2024 13:08:31 +0200 Subject: [PATCH 056/177] Add AWS SDK and Soto examples (#396) * add aws sdk example * add soto example * use amazonlinux docker image instead of ubuntu * dynamically add runtime dependency based on env var * remove import of Foundation.ProcessInfo * workaround https://github.com/actions/checkout/issues/1487 --- .github/workflows/examples_matrix.yml | 39 +++++++++--- Examples/APIGateway/Package.swift | 39 +++++++----- Examples/APIGateway/README.md | 10 +-- Examples/APIGateway/template.yaml | 10 +-- Examples/HelloWorld/Package.swift | 32 ++++++---- Examples/S3_AWSSDK/.gitignore | 12 ++++ Examples/S3_AWSSDK/Package.swift | 63 +++++++++++++++++++ Examples/S3_AWSSDK/README.md | 89 +++++++++++++++++++++++++++ Examples/S3_AWSSDK/Sources/main.swift | 38 ++++++++++++ Examples/S3_AWSSDK/template.yaml | 43 +++++++++++++ Examples/S3_Soto/.gitignore | 12 ++++ Examples/S3_Soto/Package.swift | 64 +++++++++++++++++++ Examples/S3_Soto/README.md | 89 +++++++++++++++++++++++++++ Examples/S3_Soto/Sources/main.swift | 42 +++++++++++++ Examples/S3_Soto/template.yaml | 44 +++++++++++++ 15 files changed, 579 insertions(+), 47 deletions(-) create mode 100644 Examples/S3_AWSSDK/.gitignore create mode 100644 Examples/S3_AWSSDK/Package.swift create mode 100644 Examples/S3_AWSSDK/README.md create mode 100644 Examples/S3_AWSSDK/Sources/main.swift create mode 100644 Examples/S3_AWSSDK/template.yaml create mode 100644 Examples/S3_Soto/.gitignore create mode 100644 Examples/S3_Soto/Package.swift create mode 100644 Examples/S3_Soto/README.md create mode 100644 Examples/S3_Soto/Sources/main.swift create mode 100644 Examples/S3_Soto/template.yaml diff --git a/.github/workflows/examples_matrix.yml b/.github/workflows/examples_matrix.yml index 39ec1d26..15e4e859 100644 --- a/.github/workflows/examples_matrix.yml +++ b/.github/workflows/examples_matrix.yml @@ -18,7 +18,7 @@ on: matrix_linux_swift_container_image: type: string description: "Container image for the matrix job. Defaults to matching latest Swift Ubuntu image." - default: "swift:latest" + default: "swift:amazonlinux2" ## We are cancelling previously triggered workflow runs concurrency: @@ -33,28 +33,49 @@ jobs: fail-fast: false matrix: # This should be passed as an argument in input. Can we pass arrays as argument ? - examples : [ "HelloWorld", "APIGateway" ] + examples : [ "HelloWorld", "APIGateway", "S3_AWSSDK", "S3_Soto" ] # examples: ${{ inputs.examples }} # We are using only one Swift version swift: - image: ${{ inputs.matrix_linux_swift_container_image }} - swift_version: "6.0.1-noble" + swift_version: "6.0.1-amazonlinux2" container: image: ${{ matrix.swift.image }} steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - persist-credentials: false + + # GitHub checkout action has a dep on NodeJS 20 which is not running on Amazonlinux2 + # workaround is to manually checkout the repository + # https://github.com/actions/checkout/issues/1487 + - name: Manually Clone repository and checkout PR + env: + PR_NUMBER: ${{ github.event.pull_request.number }} + run: | + # Clone the repository + git clone https://github.com/${{ github.repository }} + cd ${{ github.event.repository.name }} + + # Fetch the pull request + git fetch origin +refs/pull/$PR_NUMBER/merge: + + # Checkout the pull request + git checkout -qf FETCH_HEAD + + # - name: Checkout repository + # uses: actions/checkout@v4 + # with: + # persist-credentials: false + - name: Mark the workspace as safe - # https://github.com/actions/checkout/issues/766 + working-directory: ${{ github.event.repository.name }} # until we can use action/checkout@v4 + # https://github.com/actions/checkout/issues/766 run: git config --global --add safe.directory ${GITHUB_WORKSPACE} + - name: Run matrix job + working-directory: ${{ github.event.repository.name }} # until we can use action/checkout@v4 env: SWIFT_VERSION: ${{ matrix.swift.swift_version }} COMMAND: ${{ inputs.matrix_linux_command }} EXAMPLE: ${{ matrix.examples }} run: | - apt-get -qq update && apt-get -qq -y install curl ./scripts/integration_tests.sh \ No newline at end of file diff --git a/Examples/APIGateway/Package.swift b/Examples/APIGateway/Package.swift index a2df5b73..ebaac99a 100644 --- a/Examples/APIGateway/Package.swift +++ b/Examples/APIGateway/Package.swift @@ -3,7 +3,6 @@ import PackageDescription // needed for CI to test the local version of the library -import class Foundation.ProcessInfo import struct Foundation.URL #if os(macOS) @@ -16,17 +15,16 @@ let package = Package( name: "swift-aws-lambda-runtime-example", platforms: platforms, products: [ - .executable(name: "APIGAtewayLambda", targets: ["APIGAtewayLambda"]) + .executable(name: "APIGatewayLambda", targets: ["APIGatewayLambda"]) ], dependencies: [ - // dependency on swift-aws-lambda-runtime is added dynamically below - // .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main") - - .package(url: "https://github.com/swift-server/swift-aws-lambda-events.git", branch: "main") + // during CI, the dependency on local version of swift-aws-lambda-runtime is added dynamically below + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main"), + .package(url: "https://github.com/swift-server/swift-aws-lambda-events.git", branch: "main"), ], targets: [ .executableTarget( - name: "APIGAtewayLambda", + name: "APIGatewayLambda", dependencies: [ .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), .product(name: "AWSLambdaEvents", package: "swift-aws-lambda-events"), @@ -36,20 +34,29 @@ let package = Package( ] ) -if let localDepsPath = ProcessInfo.processInfo.environment["LAMBDA_USE_LOCAL_DEPS"], +if let localDepsPath = Context.environment["LAMBDA_USE_LOCAL_DEPS"], localDepsPath != "", let v = try? URL(fileURLWithPath: localDepsPath).resourceValues(forKeys: [.isDirectoryKey]), - let _ = v.isDirectory + v.isDirectory == true { + // when we use the local runtime as deps, let's remove the dependency added above + let indexToRemove = package.dependencies.firstIndex { dependency in + if case .sourceControl( + name: _, + location: "https://github.com/swift-server/swift-aws-lambda-runtime.git", + requirement: _ + ) = dependency.kind { + return true + } + return false + } + if let indexToRemove { + package.dependencies.remove(at: indexToRemove) + } + + // then we add the dependency on LAMBDA_USE_LOCAL_DEPS' path (typically ../..) print("[INFO] Compiling against swift-aws-lambda-runtime located at \(localDepsPath)") package.dependencies += [ .package(name: "swift-aws-lambda-runtime", path: localDepsPath) ] - -} else { - print("[INFO] LAMBDA_USE_LOCAL_DEPS is not pointing to your local swift-aws-lambda-runtime code") - print("[INFO] This project will compile against the main branch of the Lambda Runtime on GitHub") - package.dependencies += [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main") - ] } diff --git a/Examples/APIGateway/README.md b/Examples/APIGateway/README.md index f534f9ba..be4c8b8c 100644 --- a/Examples/APIGateway/README.md +++ b/Examples/APIGateway/README.md @@ -26,7 +26,7 @@ swift package archive --allow-network-access docker ``` If there is no error, there is a ZIP file ready to deploy. -The ZIP file is located at `.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/MyLambda/MyLambda.zip` +The ZIP file is located at `.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/APIGatewayLambda/APIGatewayLambda.zip` ## Deploy @@ -40,9 +40,9 @@ To actually deploy your Lambda function and create the infrastructure, type the ```bash sam deploy \ -----resolve-s3 \ +--resolve-s3 \ --template-file template.yaml \ ---stack-name MyLambda \ +--stack-name APIGatewayLambda \ --capabilities CAPABILITY_IAM ``` @@ -53,8 +53,8 @@ The output is similar to this one. ----------------------------------------------------------------------------------------------------------------------------- Outputs ----------------------------------------------------------------------------------------------------------------------------- -Key APIGAtewayEndpoint -Description API Gateway endpoint UR" +Key APIGatewayEndpoint +Description API Gateway endpoint URL" Value https://a5q74es3k2.execute-api.us-east-1.amazonaws.com ----------------------------------------------------------------------------------------------------------------------------- ``` diff --git a/Examples/APIGateway/template.yaml b/Examples/APIGateway/template.yaml index 700c09b0..99a00da9 100644 --- a/Examples/APIGateway/template.yaml +++ b/Examples/APIGateway/template.yaml @@ -4,12 +4,12 @@ Description: SAM Template for QuoteService Resources: # Lambda function - APIGAtewayLambda: + APIGatewayLambda: Type: AWS::Serverless::Function Properties: - CodeUri: .build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/APIGAtewayLambda/APIGAtewayLambda.zip + CodeUri: .build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/APIGatewayLambda/APIGatewayLambda.zip Timeout: 60 - Handler: swift.bootstrap + Handler: swift.bootstrap # ignored by the Swift runtime Runtime: provided.al2 MemorySize: 512 Architectures: @@ -19,13 +19,13 @@ Resources: # by default, AWS Lambda runtime produces no log # use `LOG_LEVEL: debug` for for lifecycle and event handling information # use `LOG_LEVEL: trace` for detailed input event information - LOG_LEVEL: trace + LOG_LEVEL: debug Events: HttpApiEvent: Type: HttpApi Outputs: # print API Gateway endpoint - APIGAtewayEndpoint: + APIGatewayEndpoint: Description: API Gateway endpoint UR" Value: !Sub "https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com" diff --git a/Examples/HelloWorld/Package.swift b/Examples/HelloWorld/Package.swift index 6468fb88..adb4b1f9 100644 --- a/Examples/HelloWorld/Package.swift +++ b/Examples/HelloWorld/Package.swift @@ -3,7 +3,6 @@ import PackageDescription // needed for CI to test the local version of the library -import class Foundation.ProcessInfo import struct Foundation.URL #if os(macOS) @@ -19,8 +18,8 @@ let package = Package( .executable(name: "MyLambda", targets: ["MyLambda"]) ], dependencies: [ - // dependency on swift-aws-lambda-runtime is added dynamically below - // .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main") + // during CI, the dependency on local version of swift-aws-lambda-runtime is added dynamically below + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main") ], targets: [ .executableTarget( @@ -33,20 +32,29 @@ let package = Package( ] ) -if let localDepsPath = ProcessInfo.processInfo.environment["LAMBDA_USE_LOCAL_DEPS"], +if let localDepsPath = Context.environment["LAMBDA_USE_LOCAL_DEPS"], localDepsPath != "", let v = try? URL(fileURLWithPath: localDepsPath).resourceValues(forKeys: [.isDirectoryKey]), - let _ = v.isDirectory + v.isDirectory == true { + // when we use the local runtime as deps, let's remove the dependency added above + let indexToRemove = package.dependencies.firstIndex { dependency in + if case .sourceControl( + name: _, + location: "https://github.com/swift-server/swift-aws-lambda-runtime.git", + requirement: _ + ) = dependency.kind { + return true + } + return false + } + if let indexToRemove { + package.dependencies.remove(at: indexToRemove) + } + + // then we add the dependency on LAMBDA_USE_LOCAL_DEPS' path (typically ../..) print("[INFO] Compiling against swift-aws-lambda-runtime located at \(localDepsPath)") package.dependencies += [ .package(name: "swift-aws-lambda-runtime", path: localDepsPath) ] - -} else { - print("[INFO] LAMBDA_USE_LOCAL_DEPS is not pointing to your local swift-aws-lambda-runtime code") - print("[INFO] This project will compile against the main branch of the Lambda Runtime on GitHub") - package.dependencies += [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main") - ] } diff --git a/Examples/S3_AWSSDK/.gitignore b/Examples/S3_AWSSDK/.gitignore new file mode 100644 index 00000000..70799e05 --- /dev/null +++ b/Examples/S3_AWSSDK/.gitignore @@ -0,0 +1,12 @@ +.DS_Store +.aws-sam/ +.build +samtemplate.toml +*/build/* +/.build +/Packages +xcuserdata/ +DerivedData/ +.swiftpm/configuration/registries.json +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +.netrc \ No newline at end of file diff --git a/Examples/S3_AWSSDK/Package.swift b/Examples/S3_AWSSDK/Package.swift new file mode 100644 index 00000000..5417fbdd --- /dev/null +++ b/Examples/S3_AWSSDK/Package.swift @@ -0,0 +1,63 @@ +// swift-tools-version: 6.0 + +import PackageDescription + +// needed for CI to test the local version of the library +import struct Foundation.URL + +#if os(macOS) +let platforms: [PackageDescription.SupportedPlatform]? = [.macOS(.v15)] +#else +let platforms: [PackageDescription.SupportedPlatform]? = nil +#endif + +let package = Package( + name: "AWSSDKExample", + platforms: platforms, + products: [ + .executable(name: "AWSSDKExample", targets: ["AWSSDKExample"]) + ], + dependencies: [ + // during CI, the dependency on local version of swift-aws-lambda-runtime is added dynamically below + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main"), + .package(url: "https://github.com/swift-server/swift-aws-lambda-events", branch: "main"), + .package(url: "https://github.com/awslabs/aws-sdk-swift", from: "1.0.0"), + ], + targets: [ + .executableTarget( + name: "AWSSDKExample", + dependencies: [ + .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), + .product(name: "AWSLambdaEvents", package: "swift-aws-lambda-events"), + .product(name: "AWSS3", package: "aws-sdk-swift"), + ] + ) + ] +) + +if let localDepsPath = Context.environment["LAMBDA_USE_LOCAL_DEPS"], + localDepsPath != "", + let v = try? URL(fileURLWithPath: localDepsPath).resourceValues(forKeys: [.isDirectoryKey]), + v.isDirectory == true +{ + // when we use the local runtime as deps, let's remove the dependency added above + let indexToRemove = package.dependencies.firstIndex { dependency in + if case .sourceControl( + name: _, + location: "https://github.com/swift-server/swift-aws-lambda-runtime.git", + requirement: _ + ) = dependency.kind { + return true + } + return false + } + if let indexToRemove { + package.dependencies.remove(at: indexToRemove) + } + + // then we add the dependency on LAMBDA_USE_LOCAL_DEPS' path (typically ../..) + print("[INFO] Compiling against swift-aws-lambda-runtime located at \(localDepsPath)") + package.dependencies += [ + .package(name: "swift-aws-lambda-runtime", path: localDepsPath) + ] +} diff --git a/Examples/S3_AWSSDK/README.md b/Examples/S3_AWSSDK/README.md new file mode 100644 index 00000000..58a7b83d --- /dev/null +++ b/Examples/S3_AWSSDK/README.md @@ -0,0 +1,89 @@ +# List Amazon S3 Buckets with the AWS SDK for Swift + +This is a simple example of an AWS Lambda function that uses the [AWS SDK for Swift](https://github.com/awslabs/aws-sdk-swift) to read data from Amazon S3. + +## Code + +The Lambda function reads all bucket names from your AWS account and returns them as a String. + +The code creates a `LambdaRuntime` struct. In it's simplest form, the initializer takes a function as argument. The function is the handler that will be invoked when the API Gateway receives an HTTP request. + +The handler is `(event: APIGatewayV2Request, context: LambdaContext) -> APIGatewayV2Response`. The function takes two arguments: +- the event argument is a `APIGatewayV2Request`. It is the parameter passed by the API Gateway. It contains all data passed in the HTTP request and some meta data. +- the context argument is a `Lambda Context`. It is a description of the runtime context. + +The function must return a `APIGatewayV2Response`. + +`APIGatewayV2Request` and `APIGatewayV2Response` are defined in the [Swift AWS Lambda Events](https://github.com/swift-server/swift-aws-lambda-events) library. + +The handler creates an S3 client and `ListBucketsInput` object. It passes the input object to the client and receives an output response. +It then extracts the list of bucket names from the output and creates a `\n`-separated list of names, as a `String` + +## Build & Package + +To build the package, type the following commands. + +```bash +swift build +swift package archive --allow-network-access docker +``` + +If there is no error, there is a ZIP file ready to deploy. +The ZIP file is located at `.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/AWSSDKExample/AWSSDKExample.zip` + +## Deploy + +The deployment must include the Lambda function and an API Gateway. We use the [Serverless Application Model (SAM)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html) to deploy the infrastructure. + +**Prerequisites** : Install the [SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html) + +The example directory contains a file named `template.yaml` that describes the deployment. + +To actually deploy your Lambda function and create the infrastructure, type the following `sam` command. + +```bash +sam deploy \ +--resolve-s3 \ +--template-file template.yaml \ +--stack-name AWSSDKExample \ +--capabilities CAPABILITY_IAM +``` + +At the end of the deployment, the script lists the API Gateway endpoint. +The output is similar to this one. + +``` +----------------------------------------------------------------------------------------------------------------------------- +Outputs +----------------------------------------------------------------------------------------------------------------------------- +Key APIGatewayEndpoint +Description API Gateway endpoint URL" +Value https://a5q74es3k2.execute-api.us-east-1.amazonaws.com +----------------------------------------------------------------------------------------------------------------------------- +``` + +## Invoke your Lambda function + +To invoke the Lambda function, use this `curl` command line. + +```bash +curl https://a5q74es3k2.execute-api.us-east-1.amazonaws.com +``` + +Be sure to replace the URL with the API Gateway endpoint returned in the previous step. + +This should print text similar to + +```bash +my_bucket_1 +my_bucket_2 +... +``` + +## Delete the infrastructure + +When done testing, you can delete the infrastructure with this command. + +```bash +sam delete +``` \ No newline at end of file diff --git a/Examples/S3_AWSSDK/Sources/main.swift b/Examples/S3_AWSSDK/Sources/main.swift new file mode 100644 index 00000000..6665893c --- /dev/null +++ b/Examples/S3_AWSSDK/Sources/main.swift @@ -0,0 +1,38 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import AWSLambdaEvents +import AWSLambdaRuntime +@preconcurrency import AWSS3 + +let client = try await S3Client() + +let runtime = LambdaRuntime { + (event: APIGatewayV2Request, context: LambdaContext) async throws -> APIGatewayV2Response in + + var response: APIGatewayV2Response + do { + // read the list of buckets + context.logger.debug("Reading list of buckets") + let output = try await client.listBuckets(input: ListBucketsInput()) + let bucketList = output.buckets?.compactMap { $0.name } + response = APIGatewayV2Response(statusCode: .ok, body: bucketList?.joined(separator: "\n")) + } catch { + context.logger.error("\(error)") + response = APIGatewayV2Response(statusCode: .internalServerError, body: "[ERROR] \(error)") + } + return response +} + +try await runtime.run() diff --git a/Examples/S3_AWSSDK/template.yaml b/Examples/S3_AWSSDK/template.yaml new file mode 100644 index 00000000..b1e02416 --- /dev/null +++ b/Examples/S3_AWSSDK/template.yaml @@ -0,0 +1,43 @@ +AWSTemplateFormatVersion: '2010-09-09' +Transform: AWS::Serverless-2016-10-31 +Description: SAM Template for AWS SDK Example + +Resources: + # Lambda function + AWSSDKExample: + Type: AWS::Serverless::Function + Properties: + CodeUri: .build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/AWSSDKExample/AWSSDKExample.zip + Timeout: 60 + Handler: swift.bootstrap # ignored by the Swift runtime + Runtime: provided.al2 + MemorySize: 512 + Architectures: + - arm64 + Environment: + Variables: + # by default, AWS Lambda runtime produces no log + # use `LOG_LEVEL: debug` for for lifecycle and event handling information + # use `LOG_LEVEL: trace` for detailed input event information + LOG_LEVEL: debug + + # Handles all methods of the REST API + Events: + Api: + Type: HttpApi + + # Add an IAM policy to this function. + # It grants the function permissions to read the list of buckets in your account. + Policies: + - Statement: + - Sid: ListAllS3BucketsInYourAccount + Effect: Allow + Action: + - s3:ListAllMyBuckets + Resource: '*' + +# print API endpoint +Outputs: + SwiftAPIEndpoint: + Description: "API Gateway endpoint URL for your application" + Value: !Sub "https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com" diff --git a/Examples/S3_Soto/.gitignore b/Examples/S3_Soto/.gitignore new file mode 100644 index 00000000..70799e05 --- /dev/null +++ b/Examples/S3_Soto/.gitignore @@ -0,0 +1,12 @@ +.DS_Store +.aws-sam/ +.build +samtemplate.toml +*/build/* +/.build +/Packages +xcuserdata/ +DerivedData/ +.swiftpm/configuration/registries.json +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +.netrc \ No newline at end of file diff --git a/Examples/S3_Soto/Package.swift b/Examples/S3_Soto/Package.swift new file mode 100644 index 00000000..4b4eead1 --- /dev/null +++ b/Examples/S3_Soto/Package.swift @@ -0,0 +1,64 @@ +// swift-tools-version: 6.0 + +import PackageDescription + +// needed for CI to test the local version of the library +import struct Foundation.URL + +#if os(macOS) +let platforms: [PackageDescription.SupportedPlatform]? = [.macOS(.v15)] +#else +let platforms: [PackageDescription.SupportedPlatform]? = nil +#endif + +let package = Package( + name: "SotoExample", + platforms: platforms, + products: [ + .executable(name: "SotoExample", targets: ["SotoExample"]) + ], + dependencies: [ + .package(url: "https://github.com/soto-project/soto.git", from: "7.0.0"), + + // during CI, the dependency on local version of swift-aws-lambda-runtime is added dynamically below + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main"), + .package(url: "https://github.com/swift-server/swift-aws-lambda-events", branch: "main"), + ], + targets: [ + .executableTarget( + name: "SotoExample", + dependencies: [ + .product(name: "SotoS3", package: "soto"), + .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), + .product(name: "AWSLambdaEvents", package: "swift-aws-lambda-events"), + ] + ) + ] +) + +if let localDepsPath = Context.environment["LAMBDA_USE_LOCAL_DEPS"], + localDepsPath != "", + let v = try? URL(fileURLWithPath: localDepsPath).resourceValues(forKeys: [.isDirectoryKey]), + v.isDirectory == true +{ + // when we use the local runtime as deps, let's remove the dependency added above + let indexToRemove = package.dependencies.firstIndex { dependency in + if case .sourceControl( + name: _, + location: "https://github.com/swift-server/swift-aws-lambda-runtime.git", + requirement: _ + ) = dependency.kind { + return true + } + return false + } + if let indexToRemove { + package.dependencies.remove(at: indexToRemove) + } + + // then we add the dependency on LAMBDA_USE_LOCAL_DEPS' path (typically ../..) + print("[INFO] Compiling against swift-aws-lambda-runtime located at \(localDepsPath)") + package.dependencies += [ + .package(name: "swift-aws-lambda-runtime", path: localDepsPath) + ] +} diff --git a/Examples/S3_Soto/README.md b/Examples/S3_Soto/README.md new file mode 100644 index 00000000..c9c0e4a1 --- /dev/null +++ b/Examples/S3_Soto/README.md @@ -0,0 +1,89 @@ +# List Amazon S3 Buckets with Soto + +This is a simple example of an AWS Lambda function that uses the [Soto SDK for AWS](https://github.com/soto-project/soto) to read data from Amazon S3. + +## Code + +The Lambda function reads all bucket names from your AWS account and returns them as a String. + +The code creates a `LambdaRuntime` struct. In it's simplest form, the initializer takes a function as argument. The function is the handler that will be invoked when the API Gateway receives an HTTP request. + +The handler is `(event: APIGatewayV2Request, context: LambdaContext) -> APIGatewayV2Response`. The function takes two arguments: +- the event argument is a `APIGatewayV2Request`. It is the parameter passed by the API Gateway. It contains all data passed in the HTTP request and some meta data. +- the context argument is a `Lambda Context`. It is a description of the runtime context. + +The function must return a `APIGatewayV2Response`. + +`APIGatewayV2Request` and `APIGatewayV2Response` are defined in the [Swift AWS Lambda Events](https://github.com/swift-server/swift-aws-lambda-events) library. + +The handler creates two clients : an AWS client that manages the communication with AWS API and and the S3 client that expose the S3 API. Then, the handler calls `listBuckets()` on the S3 client and receives an output response. +Finally, the handler extracts the list of bucket names from the output to create a `\n`-separated list of names, as a `String`. + +## Build & Package + +To build the package, type the following command. + +```bash +swift build +swift package archive --allow-network-access docker +``` + +If there is no error, there is a ZIP file ready to deploy. +The ZIP file is located at `.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/SotoExample/SotoExample.zip` + +## Deploy + +The deployment must include the Lambda function and an API Gateway. We use the [Serverless Application Model (SAM)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html) to deploy the infrastructure. + +**Prerequisites** : Install the [SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html) + +The example directory contains a file named `template.yaml` that describes the deployment. + +To actually deploy your Lambda function and create the infrastructure, type the following `sam` command. + +```bash +sam deploy \ +--resolve-s3 \ +--template-file template.yaml \ +--stack-name SotoExample \ +--capabilities CAPABILITY_IAM +``` + +At the end of the deployment, the script lists the API Gateway endpoint. +The output is similar to this one. + +``` +----------------------------------------------------------------------------------------------------------------------------- +Outputs +----------------------------------------------------------------------------------------------------------------------------- +Key APIGatewayEndpoint +Description API Gateway endpoint URL" +Value https://a5q74es3k2.execute-api.us-east-1.amazonaws.com +----------------------------------------------------------------------------------------------------------------------------- +``` + +## Invoke your Lambda function + +To invoke the Lambda function, use this `curl` command line. + +```bash +curl https://a5q74es3k2.execute-api.us-east-1.amazonaws.com +``` + +Be sure to replace the URL with the API Gateway endpoint returned in the previous step. + +This should print text similar to + +```bash +my_bucket_1 +my_bucket_2 +... +``` + +## Delete the infrastructure + +When done testing, you can delete the infrastructure with this command. + +```bash +sam delete +``` \ No newline at end of file diff --git a/Examples/S3_Soto/Sources/main.swift b/Examples/S3_Soto/Sources/main.swift new file mode 100644 index 00000000..caa70116 --- /dev/null +++ b/Examples/S3_Soto/Sources/main.swift @@ -0,0 +1,42 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import AWSLambdaEvents +import AWSLambdaRuntime +import SotoS3 + +let client = AWSClient() +let s3 = S3(client: client, region: .useast1) + +func handler(event: APIGatewayV2Request, context: LambdaContext) async throws -> APIGatewayV2Response { + + var response: APIGatewayV2Response + do { + context.logger.debug("Reading list of buckets") + + // read the list of buckets + let bucketResponse = try await s3.listBuckets() + let bucketList = bucketResponse.buckets?.compactMap { $0.name } + response = APIGatewayV2Response(statusCode: .ok, body: bucketList?.joined(separator: "\n")) + } catch { + context.logger.error("\(error)") + response = APIGatewayV2Response(statusCode: .internalServerError, body: "[ERROR] \(error)") + } + return response +} + +let runtime = LambdaRuntime.init(body: handler) + +try await runtime.run() +try await client.shutdown() diff --git a/Examples/S3_Soto/template.yaml b/Examples/S3_Soto/template.yaml new file mode 100644 index 00000000..50093169 --- /dev/null +++ b/Examples/S3_Soto/template.yaml @@ -0,0 +1,44 @@ + +AWSTemplateFormatVersion: '2010-09-09' +Transform: AWS::Serverless-2016-10-31 +Description: SAM Template for AWS SDK Example + +Resources: + # Lambda function + SotoExample: + Type: AWS::Serverless::Function + Properties: + CodeUri: .build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/SotoExample/SotoExample.zip + Timeout: 60 + Handler: swift.bootstrap # ignored by the Swift runtime + Runtime: provided.al2 + MemorySize: 512 + Architectures: + - arm64 + Environment: + Variables: + # by default, AWS Lambda runtime produces no log + # use `LOG_LEVEL: debug` for for lifecycle and event handling information + # use `LOG_LEVEL: trace` for detailed input event information + LOG_LEVEL: debug + + # Handles all methods of the REST API + Events: + Api: + Type: HttpApi + + # Add an IAM policy to this function. + # It grants the function permissions to read the list of buckets in your account. + Policies: + - Statement: + - Sid: ListAllS3BucketsInYourAccount + Effect: Allow + Action: + - s3:ListAllMyBuckets + Resource: '*' + +# print API endpoint +Outputs: + SwiftAPIEndpoint: + Description: "API Gateway endpoint URL for your application" + Value: !Sub "https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com" From 59dd68adabf11e49c64716757f63a73acf41199a Mon Sep 17 00:00:00 2001 From: Franz Busch Date: Fri, 11 Oct 2024 15:49:34 +0200 Subject: [PATCH 057/177] [CI] Adopt soundess workflow from swiftlang (#405) --- .github/ISSUE_TEMPLATE/issue-report.yml | 4 +- .github/workflows/examples_matrix.yml | 73 ++++++++++++------------- .github/workflows/pull_request.yml | 63 ++++++++++----------- Examples/APIGateway/template.yaml | 4 +- Examples/S3_AWSSDK/template.yaml | 12 ++-- Examples/S3_Soto/template.yaml | 13 ++--- 6 files changed, 84 insertions(+), 85 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/issue-report.yml b/.github/ISSUE_TEMPLATE/issue-report.yml index e5f5d4e9..ae6e0ba3 100644 --- a/.github/ISSUE_TEMPLATE/issue-report.yml +++ b/.github/ISSUE_TEMPLATE/issue-report.yml @@ -17,7 +17,7 @@ body: attributes: label: Actual behavior description: What actually happened - placeholder: Describe + placeholder: Describe validations: required: true - type: textarea @@ -55,7 +55,7 @@ body: attributes: label: Swift version description: Swift environment version. - placeholder: | + placeholder: | Open a Terminal and execute the following command swift --version && uname -a diff --git a/.github/workflows/examples_matrix.yml b/.github/workflows/examples_matrix.yml index 15e4e859..fb9cca41 100644 --- a/.github/workflows/examples_matrix.yml +++ b/.github/workflows/examples_matrix.yml @@ -24,58 +24,57 @@ on: concurrency: group: ${{ github.workflow }}-${{ github.ref }}-${{ inputs.name }} cancel-in-progress: true - + jobs: linux: - name: Example/${{ matrix.examples }} on Linux ${{ matrix.swift.swift_version }} + name: Example/${{ matrix.examples }} on Linux ${{ matrix.swift.swift_version }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: # This should be passed as an argument in input. Can we pass arrays as argument ? - examples : [ "HelloWorld", "APIGateway", "S3_AWSSDK", "S3_Soto" ] + examples: ["HelloWorld", "APIGateway", "S3_AWSSDK", "S3_Soto"] # examples: ${{ inputs.examples }} - # We are using only one Swift version + # We are using only one Swift version swift: - - image: ${{ inputs.matrix_linux_swift_container_image }} - swift_version: "6.0.1-amazonlinux2" + - image: ${{ inputs.matrix_linux_swift_container_image }} + swift_version: "6.0.1-amazonlinux2" container: image: ${{ matrix.swift.image }} steps: + # GitHub checkout action has a dep on NodeJS 20 which is not running on Amazonlinux2 + # workaround is to manually checkout the repository + # https://github.com/actions/checkout/issues/1487 + - name: Manually Clone repository and checkout PR + env: + PR_NUMBER: ${{ github.event.pull_request.number }} + run: | + # Clone the repository + git clone https://github.com/${{ github.repository }} + cd ${{ github.event.repository.name }} - # GitHub checkout action has a dep on NodeJS 20 which is not running on Amazonlinux2 - # workaround is to manually checkout the repository - # https://github.com/actions/checkout/issues/1487 - - name: Manually Clone repository and checkout PR - env: - PR_NUMBER: ${{ github.event.pull_request.number }} - run: | - # Clone the repository - git clone https://github.com/${{ github.repository }} - cd ${{ github.event.repository.name }} + # Fetch the pull request + git fetch origin +refs/pull/$PR_NUMBER/merge: - # Fetch the pull request - git fetch origin +refs/pull/$PR_NUMBER/merge: - - # Checkout the pull request - git checkout -qf FETCH_HEAD + # Checkout the pull request + git checkout -qf FETCH_HEAD - # - name: Checkout repository - # uses: actions/checkout@v4 - # with: - # persist-credentials: false + # - name: Checkout repository + # uses: actions/checkout@v4 + # with: + # persist-credentials: false - - name: Mark the workspace as safe - working-directory: ${{ github.event.repository.name }} # until we can use action/checkout@v4 - # https://github.com/actions/checkout/issues/766 - run: git config --global --add safe.directory ${GITHUB_WORKSPACE} + - name: Mark the workspace as safe + working-directory: ${{ github.event.repository.name }} # until we can use action/checkout@v4 + # https://github.com/actions/checkout/issues/766 + run: git config --global --add safe.directory ${GITHUB_WORKSPACE} - - name: Run matrix job - working-directory: ${{ github.event.repository.name }} # until we can use action/checkout@v4 - env: - SWIFT_VERSION: ${{ matrix.swift.swift_version }} - COMMAND: ${{ inputs.matrix_linux_command }} - EXAMPLE: ${{ matrix.examples }} - run: | - ./scripts/integration_tests.sh \ No newline at end of file + - name: Run matrix job + working-directory: ${{ github.event.repository.name }} # until we can use action/checkout@v4 + env: + SWIFT_VERSION: ${{ matrix.swift.swift_version }} + COMMAND: ${{ inputs.matrix_linux_command }} + EXAMPLE: ${{ matrix.examples }} + run: | + ./scripts/integration_tests.sh diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 77f9a5af..ad616cdc 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -1,38 +1,39 @@ name: PR on: - pull_request: - types: [opened, reopened, synchronize] + pull_request: + types: [opened, reopened, synchronize] jobs: - soundness: - name: Soundness - uses: apple/swift-nio/.github/workflows/soundness.yml@main - with: - license_header_check_project_name: "SwiftAWSLambdaRuntime" - shell_check_enabled: false - api_breakage_check_container_image: "swift:6.0-noble" - docs_check_container_image: "swift:6.0-noble" + soundness: + name: Soundness + uses: swiftlang/github-workflows/.github/workflows/soundness.yml@main + with: + license_header_check_project_name: "SwiftAWSLambdaRuntime" + shell_check_enabled: false + api_breakage_check_container_image: "swift:6.0-noble" + docs_check_container_image: "swift:6.0-noble" + format_check_container_image: "swiftlang/swift:nightly-6.0-jammy" - unit-tests: - name: Unit tests - uses: apple/swift-nio/.github/workflows/unit_tests.yml@main - with: - linux_5_8_enabled: false - linux_5_9_enabled: false - linux_5_10_enabled: false - linux_nightly_6_0_arguments_override: "--explicit-target-dependency-import-check error" - linux_nightly_main_arguments_override: "--explicit-target-dependency-import-check error" + unit-tests: + name: Unit tests + uses: apple/swift-nio/.github/workflows/unit_tests.yml@main + with: + linux_5_8_enabled: false + linux_5_9_enabled: false + linux_5_10_enabled: false + linux_nightly_6_0_arguments_override: "--explicit-target-dependency-import-check error" + linux_nightly_main_arguments_override: "--explicit-target-dependency-import-check error" - integration-tests: - name: Integration Tests - uses: ./.github/workflows/examples_matrix.yml - with: - # We should pass the list of examples here, but we can't pass an array as argument - # examples: [ "HelloWorld", "APIGateway" ] - name: "Integration tests" - matrix_linux_command: "LAMBDA_USE_LOCAL_DEPS=../.. swift build" - - swift-6-language-mode: - name: Swift 6 Language Mode - uses: apple/swift-nio/.github/workflows/swift_6_language_mode.yml@main + integration-tests: + name: Integration Tests + uses: ./.github/workflows/examples_matrix.yml + with: + # We should pass the list of examples here, but we can't pass an array as argument + # examples: [ "HelloWorld", "APIGateway" ] + name: "Integration tests" + matrix_linux_command: "LAMBDA_USE_LOCAL_DEPS=../.. swift build" + + swift-6-language-mode: + name: Swift 6 Language Mode + uses: apple/swift-nio/.github/workflows/swift_6_language_mode.yml@main diff --git a/Examples/APIGateway/template.yaml b/Examples/APIGateway/template.yaml index 99a00da9..0d7a6af4 100644 --- a/Examples/APIGateway/template.yaml +++ b/Examples/APIGateway/template.yaml @@ -9,7 +9,7 @@ Resources: Properties: CodeUri: .build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/APIGatewayLambda/APIGatewayLambda.zip Timeout: 60 - Handler: swift.bootstrap # ignored by the Swift runtime + Handler: swift.bootstrap # ignored by the Swift runtime Runtime: provided.al2 MemorySize: 512 Architectures: @@ -22,7 +22,7 @@ Resources: LOG_LEVEL: debug Events: HttpApiEvent: - Type: HttpApi + Type: HttpApi Outputs: # print API Gateway endpoint diff --git a/Examples/S3_AWSSDK/template.yaml b/Examples/S3_AWSSDK/template.yaml index b1e02416..46e29ec8 100644 --- a/Examples/S3_AWSSDK/template.yaml +++ b/Examples/S3_AWSSDK/template.yaml @@ -9,7 +9,7 @@ Resources: Properties: CodeUri: .build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/AWSSDKExample/AWSSDKExample.zip Timeout: 60 - Handler: swift.bootstrap # ignored by the Swift runtime + Handler: swift.bootstrap # ignored by the Swift runtime Runtime: provided.al2 MemorySize: 512 Architectures: @@ -30,11 +30,11 @@ Resources: # It grants the function permissions to read the list of buckets in your account. Policies: - Statement: - - Sid: ListAllS3BucketsInYourAccount - Effect: Allow - Action: - - s3:ListAllMyBuckets - Resource: '*' + - Sid: ListAllS3BucketsInYourAccount + Effect: Allow + Action: + - s3:ListAllMyBuckets + Resource: '*' # print API endpoint Outputs: diff --git a/Examples/S3_Soto/template.yaml b/Examples/S3_Soto/template.yaml index 50093169..bfc04d1e 100644 --- a/Examples/S3_Soto/template.yaml +++ b/Examples/S3_Soto/template.yaml @@ -1,4 +1,3 @@ - AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: SAM Template for AWS SDK Example @@ -10,7 +9,7 @@ Resources: Properties: CodeUri: .build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/SotoExample/SotoExample.zip Timeout: 60 - Handler: swift.bootstrap # ignored by the Swift runtime + Handler: swift.bootstrap # ignored by the Swift runtime Runtime: provided.al2 MemorySize: 512 Architectures: @@ -31,11 +30,11 @@ Resources: # It grants the function permissions to read the list of buckets in your account. Policies: - Statement: - - Sid: ListAllS3BucketsInYourAccount - Effect: Allow - Action: - - s3:ListAllMyBuckets - Resource: '*' + - Sid: ListAllS3BucketsInYourAccount + Effect: Allow + Action: + - s3:ListAllMyBuckets + Resource: '*' # print API endpoint Outputs: From 4ef50757a14b940b6cabdad73e1b2092d07c86ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Fri, 11 Oct 2024 23:35:32 +0200 Subject: [PATCH 058/177] Increase verbosity when asked (#408) Add verbose logging on docker pull action when --verbose flag is on --- Plugins/AWSLambdaPackager/Plugin.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/AWSLambdaPackager/Plugin.swift b/Plugins/AWSLambdaPackager/Plugin.swift index 916e7bc7..61b4aec3 100644 --- a/Plugins/AWSLambdaPackager/Plugin.swift +++ b/Plugins/AWSLambdaPackager/Plugin.swift @@ -101,7 +101,7 @@ struct AWSLambdaPackager: CommandPlugin { try Utils.execute( executable: dockerToolPath, arguments: ["pull", baseImage], - logLevel: .output + logLevel: verboseLogging ? .debug : .output ) } From e5b120db6747fb4f61d99f7cc64c16c74ea7e347 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Fri, 11 Oct 2024 23:51:38 +0200 Subject: [PATCH 059/177] change logging of process URL --- Plugins/AWSLambdaPackager/PluginUtils.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/AWSLambdaPackager/PluginUtils.swift b/Plugins/AWSLambdaPackager/PluginUtils.swift index e12e09dd..c6a1c24d 100644 --- a/Plugins/AWSLambdaPackager/PluginUtils.swift +++ b/Plugins/AWSLambdaPackager/PluginUtils.swift @@ -27,7 +27,7 @@ struct Utils { logLevel: ProcessLogLevel ) throws -> String { if logLevel >= .debug { - print("\(executable.absoluteString) \(arguments.joined(separator: " "))") + print("\(executable.description) \(arguments.joined(separator: " "))") } let fd = dup(1) From fc65c3cc4243148a43ad59f97378da4819a9ebca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Sat, 12 Oct 2024 00:24:55 +0200 Subject: [PATCH 060/177] Fix https://github.com/swift-server/swift-aws-lambda-runtime/issues/409 Direct use of executable URL --- Plugins/AWSLambdaPackager/PluginUtils.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/AWSLambdaPackager/PluginUtils.swift b/Plugins/AWSLambdaPackager/PluginUtils.swift index c6a1c24d..52d1b2be 100644 --- a/Plugins/AWSLambdaPackager/PluginUtils.swift +++ b/Plugins/AWSLambdaPackager/PluginUtils.swift @@ -27,7 +27,7 @@ struct Utils { logLevel: ProcessLogLevel ) throws -> String { if logLevel >= .debug { - print("\(executable.description) \(arguments.joined(separator: " "))") + print("\(executable.path()) \(arguments.joined(separator: " "))") } let fd = dup(1) @@ -83,7 +83,7 @@ struct Utils { let process = Process() process.standardOutput = pipe process.standardError = pipe - process.executableURL = URL(fileURLWithPath: executable.description) + process.executableURL = executable process.arguments = arguments if let workingDirectory = customWorkingDirectory { process.currentDirectoryURL = URL(fileURLWithPath: workingDirectory.path()) From 8eddc2872ca337a9717d07395400a4ee8de3af47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Mon, 14 Oct 2024 11:13:12 +0200 Subject: [PATCH 061/177] Do not run python linter during CI (#410) --- .github/workflows/pull_request.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index ad616cdc..e12e4593 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -11,6 +11,7 @@ jobs: with: license_header_check_project_name: "SwiftAWSLambdaRuntime" shell_check_enabled: false + python_lint_check_enabled: false api_breakage_check_container_image: "swift:6.0-noble" docs_check_container_image: "swift:6.0-noble" format_check_container_image: "swiftlang/swift:nightly-6.0-jammy" From 2fad0421869fa8523b1c5490e0703b6de3b39ad0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Mon, 14 Oct 2024 21:37:52 +0200 Subject: [PATCH 062/177] [CI] add integration test for the archive plugin (#406) * add integration test for the archive plugin --- ...mples_matrix.yml => integration_tests.yml} | 68 ++++++++++++++++--- .github/workflows/pull_request.yml | 11 ++- 2 files changed, 67 insertions(+), 12 deletions(-) rename .github/workflows/{examples_matrix.yml => integration_tests.yml} (51%) diff --git a/.github/workflows/examples_matrix.yml b/.github/workflows/integration_tests.yml similarity index 51% rename from .github/workflows/examples_matrix.yml rename to .github/workflows/integration_tests.yml index fb9cca41..71b6382a 100644 --- a/.github/workflows/examples_matrix.yml +++ b/.github/workflows/integration_tests.yml @@ -7,10 +7,22 @@ on: type: string description: "The name of the workflow used for the concurrency group." required: true - # examples: - # type: sequence - # description: "The examples to run." - # required: true + # We pass the list of examples here, but we can't pass an array as argument + # Instead, we pass a String with a valid JSON array. + # The workaround is mentioned here https://github.com/orgs/community/discussions/11692 + examples: + type: string + description: "The list of examples to run. Pass a String with a valid JSON array such as \"[ 'HelloWorld', 'APIGateway' ]\"" + required: true + default: "" + examples_enabled: + type: boolean + description: "Boolean to enable the compilation of examples. Defaults to true." + default: true + archive_plugin_enabled: + type: boolean + description: "Boolean to enable the test of the archive plugin. Defaults to true." + default: true matrix_linux_command: type: string description: "The command of the current Swift version linux matrix job to execute." @@ -26,15 +38,14 @@ concurrency: cancel-in-progress: true jobs: - linux: - name: Example/${{ matrix.examples }} on Linux ${{ matrix.swift.swift_version }} + test-examples: + name: Test Examples/${{ matrix.examples }} on ${{ matrix.swift.swift_version }} + if: ${{ inputs.examples_enabled }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: - # This should be passed as an argument in input. Can we pass arrays as argument ? - examples: ["HelloWorld", "APIGateway", "S3_AWSSDK", "S3_Soto"] - # examples: ${{ inputs.examples }} + examples: ${{ fromJson(inputs.examples) }} # We are using only one Swift version swift: @@ -78,3 +89,42 @@ jobs: EXAMPLE: ${{ matrix.examples }} run: | ./scripts/integration_tests.sh + echo "✅ The examples compile correctly" + + test-archive-plugin: + name: Test archive plugin + if: ${{ inputs.archive_plugin_enabled }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + persist-credentials: false + - name: Mark the workspace as safe + # https://github.com/actions/checkout/issues/766 + run: git config --global --add safe.directory ${GITHUB_WORKSPACE} + - name: Test the archive plugin + env: + EXAMPLE: HelloWorld + OUTPUT_FILE: .build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/MyLambda/bootstrap + ZIP_FILE: .build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/MyLambda/MyLambda.zip + run: | + pushd Examples/${EXAMPLE} + + # package the example (docker and swift toolchain are installed on the GH runner) + echo yes | swift package archive --allow-network-connections docker + + # did the plugin generated a Linux binary? + [ -f ${OUTPUT_FILE} ] + file ${OUTPUT_FILE} | grep --silent ELF + + # did the plugin created a ZIP file? + [ -f ${ZIP_FILE} ] + + # does the ZIP file contain the bootstrap? + unzip -l ${ZIP_FILE} | grep --silent bootstrap + + echo "✅ The archive plugin is OK" + popd diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index e12e4593..7e1c61b8 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -28,12 +28,17 @@ jobs: integration-tests: name: Integration Tests - uses: ./.github/workflows/examples_matrix.yml + uses: ./.github/workflows/integration_tests.yml with: - # We should pass the list of examples here, but we can't pass an array as argument - # examples: [ "HelloWorld", "APIGateway" ] name: "Integration tests" + examples_enabled: true matrix_linux_command: "LAMBDA_USE_LOCAL_DEPS=../.. swift build" + # We pass the list of examples here, but we can't pass an array as argument + # Instead, we pass a String with a valid JSON array. + # The workaround is mentioned here https://github.com/orgs/community/discussions/11692 + examples: "[ 'HelloWorld', 'APIGateway','S3_AWSSDK', 'S3_Soto' ]" + + archive_plugin_enabled: true swift-6-language-mode: name: Swift 6 Language Mode From 75d0404a0554a21ea2477846f78296d7af83d127 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Thu, 17 Oct 2024 11:09:21 +0200 Subject: [PATCH 063/177] [CI] drop Swift 5.8 (#411) Align to the new version of the CI script is Swift NIO project --- .github/workflows/pull_request.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 7e1c61b8..e82257a7 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -20,7 +20,6 @@ jobs: name: Unit tests uses: apple/swift-nio/.github/workflows/unit_tests.yml@main with: - linux_5_8_enabled: false linux_5_9_enabled: false linux_5_10_enabled: false linux_nightly_6_0_arguments_override: "--explicit-target-dependency-import-check error" From 1edaedfb19a9157612bfe3877c90c26e4a454587 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Thu, 17 Oct 2024 17:57:23 +0200 Subject: [PATCH 064/177] [CI] add testing on musl (#412) * [CI] add testing on musl --- .github/workflows/pull_request.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index e82257a7..5e9a8fc5 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -42,3 +42,17 @@ jobs: swift-6-language-mode: name: Swift 6 Language Mode uses: apple/swift-nio/.github/workflows/swift_6_language_mode.yml@main + + # until there is a support for musl in swiftlang/github-workflows + # https://github.com/swiftlang/github-workflows/issues/34 + musl: + runs-on: ubuntu-latest + container: swift:6.0-noble + timeout-minutes: 30 + steps: + - name: Check out code + uses: actions/checkout@v4 + - name: Install SDK + run: swift sdk install https://download.swift.org/swift-6.0.1-release/static-sdk/swift-6.0.1-RELEASE/swift-6.0.1-RELEASE_static-linux-0.0.1.artifactbundle.tar.gz --checksum d4f46ba40e11e697387468e18987ee622908bc350310d8af54eb5e17c2ff5481 + - name: Build + run: swift build --swift-sdk x86_64-swift-linux-musl From 4992ba5bd8e31d44fd82d49eb6f704fcf4d2ceb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Fri, 18 Oct 2024 14:51:23 +0200 Subject: [PATCH 065/177] change flag name from --allow-network-access to --allow-network-connections as documented by SPM (#407) --- Examples/APIGateway/README.md | 2 +- Examples/HelloWorld/README.md | 2 +- Examples/S3_AWSSDK/README.md | 2 +- Examples/S3_Soto/README.md | 2 +- Plugins/AWSLambdaPackager/Plugin.swift | 3 ++- .../Resources/code/04-01-02-plugin-archive.sh | 2 +- .../Resources/code/04-01-03-plugin-archive.sh | 2 +- .../Resources/code/04-01-04-plugin-archive.sh | 2 +- Sources/AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md | 2 +- readme.md | 2 +- 10 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Examples/APIGateway/README.md b/Examples/APIGateway/README.md index be4c8b8c..d03c5343 100644 --- a/Examples/APIGateway/README.md +++ b/Examples/APIGateway/README.md @@ -22,7 +22,7 @@ To build the package, type the following commands. ```bash swift build -swift package archive --allow-network-access docker +swift package archive --allow-network-connections docker ``` If there is no error, there is a ZIP file ready to deploy. diff --git a/Examples/HelloWorld/README.md b/Examples/HelloWorld/README.md index 7709c3ef..73b51595 100644 --- a/Examples/HelloWorld/README.md +++ b/Examples/HelloWorld/README.md @@ -18,7 +18,7 @@ To build & archive the package, type the following commands. ```bash swift build -swift package archive --allow-network-access docker +swift package archive --allow-network-connections docker ``` If there is no error, there is a ZIP file ready to deploy. diff --git a/Examples/S3_AWSSDK/README.md b/Examples/S3_AWSSDK/README.md index 58a7b83d..4c84c277 100644 --- a/Examples/S3_AWSSDK/README.md +++ b/Examples/S3_AWSSDK/README.md @@ -25,7 +25,7 @@ To build the package, type the following commands. ```bash swift build -swift package archive --allow-network-access docker +swift package archive --allow-network-connections docker ``` If there is no error, there is a ZIP file ready to deploy. diff --git a/Examples/S3_Soto/README.md b/Examples/S3_Soto/README.md index c9c0e4a1..7ae0fa16 100644 --- a/Examples/S3_Soto/README.md +++ b/Examples/S3_Soto/README.md @@ -25,7 +25,7 @@ To build the package, type the following command. ```bash swift build -swift package archive --allow-network-access docker +swift package archive --allow-network-connections docker ``` If there is no error, there is a ZIP file ready to deploy. diff --git a/Plugins/AWSLambdaPackager/Plugin.swift b/Plugins/AWSLambdaPackager/Plugin.swift index 61b4aec3..3be4b1ba 100644 --- a/Plugins/AWSLambdaPackager/Plugin.swift +++ b/Plugins/AWSLambdaPackager/Plugin.swift @@ -287,7 +287,8 @@ struct AWSLambdaPackager: CommandPlugin { REQUIREMENTS: To use this plugin, you must have docker installed and started. - USAGE: swift package --allow-network-access docker archive [--help] [--verbose] + USAGE: swift package --allow-network-connections docker archive + [--help] [--verbose] [--output-directory ] [--products ] [--configuration debug | release] diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-02-plugin-archive.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-02-plugin-archive.sh index e1b4aa05..dc8fad5c 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-02-plugin-archive.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-02-plugin-archive.sh @@ -1,2 +1,2 @@ -swift package --allow-network-access docker plugin archive +swift package archive --allow-network-connections docker diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-03-plugin-archive.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-03-plugin-archive.sh index 37a5cd1b..0a5fc72e 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-03-plugin-archive.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-03-plugin-archive.sh @@ -1,4 +1,4 @@ -swift package --allow-network-access docker archive +swift package archive --allow-network-connections docker ------------------------------------------------------------------------- building "squarenumberlambda" in docker diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-04-plugin-archive.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-04-plugin-archive.sh index b35c9f65..90e47e41 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-04-plugin-archive.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-04-plugin-archive.sh @@ -1,4 +1,4 @@ -swift package --allow-network-access docker archive +swift package archive --allow-network-connections docker ------------------------------------------------------------------------- building "squarenumberlambda" in docker diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md b/Sources/AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md index 60065baa..f5f4a0fc 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md @@ -106,7 +106,7 @@ AWS Lambda runtime runs on Amazon Linux. You must compile your code for Amazon L > Be sure to have [Docker](https://docs.docker.com/desktop/install/mac-install/) installed for this step. ```sh -swift package --allow-network-access docker archive +swift package --allow-network-connections docker archive ------------------------------------------------------------------------- building "squarenumberlambda" in docker diff --git a/readme.md b/readme.md index e33b5379..ca8097e8 100644 --- a/readme.md +++ b/readme.md @@ -83,7 +83,7 @@ try await runtime.run() ```bash swift build -swift package archive --allow-network-access docker +swift package archive --allow-network-connections docker ``` If there is no error, there is a ZIP file ready to deploy. From 7016dfc0fd084d28af43bb904cb2522784c489b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Thu, 7 Nov 2024 09:49:11 +0100 Subject: [PATCH 066/177] Set the log level to LOG_LEVEL env variable (#417) * set the log level to LOG_LEVEL env variable * remove need for `var logger` * swift-format * [ci] update static sdk to 6.0.2 --- .github/workflows/pull_request.yml | 4 ++-- Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 5e9a8fc5..09b17cdf 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -47,12 +47,12 @@ jobs: # https://github.com/swiftlang/github-workflows/issues/34 musl: runs-on: ubuntu-latest - container: swift:6.0-noble + container: swift:6.0.2-noble timeout-minutes: 30 steps: - name: Check out code uses: actions/checkout@v4 - name: Install SDK - run: swift sdk install https://download.swift.org/swift-6.0.1-release/static-sdk/swift-6.0.1-RELEASE/swift-6.0.1-RELEASE_static-linux-0.0.1.artifactbundle.tar.gz --checksum d4f46ba40e11e697387468e18987ee622908bc350310d8af54eb5e17c2ff5481 + run: swift sdk install https://download.swift.org/swift-6.0.2-release/static-sdk/swift-6.0.2-RELEASE/swift-6.0.2-RELEASE_static-linux-0.0.1.artifactbundle.tar.gz --checksum aa5515476a403797223fc2aad4ca0c3bf83995d5427fb297cab1d93c68cee075 - name: Build run: swift build --swift-sdk x86_64-swift-linux-musl diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift index 908e2ab2..726c39a4 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift @@ -33,6 +33,12 @@ public final class LambdaRuntime: @unchecked Sendable where Handler: St ) { self.handlerMutex = NIOLockedValueBox(handler) self.eventLoop = eventLoop + + // by setting the log level here, we understand it can not be changed dynamically at runtime + // developers have to wait for AWS Lambda to dispose and recreate a runtime environment to pickup a change + // this approach is less flexible but more performant than reading the value of the environment variable at each invocation + var log = logger + log.logLevel = Lambda.env("LOG_LEVEL").flatMap(Logger.Level.init) ?? .info self.logger = logger } From 1f80164eb2a14aaac9a1b25c814e1fe2cf59e8ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Thu, 7 Nov 2024 10:06:30 +0100 Subject: [PATCH 067/177] add summary + link to API design doc in the readme (#414) * add summary + link to API design doc in the readme * typo Co-authored-by: Tim Condon <0xTim@users.noreply.github.com> * typo Co-authored-by: Tim Condon <0xTim@users.noreply.github.com> --------- Co-authored-by: Tim Condon <0xTim@users.noreply.github.com> --- Sources/AWSLambdaRuntime/Docs.docc/index.md | 28 +----------------- readme.md | 32 ++++++++++++++++++--- 2 files changed, 29 insertions(+), 31 deletions(-) diff --git a/Sources/AWSLambdaRuntime/Docs.docc/index.md b/Sources/AWSLambdaRuntime/Docs.docc/index.md index 50920dbd..4d7e1607 100644 --- a/Sources/AWSLambdaRuntime/Docs.docc/index.md +++ b/Sources/AWSLambdaRuntime/Docs.docc/index.md @@ -16,7 +16,7 @@ Swift AWS Lambda Runtime was designed to make building Lambda functions in Swift ## Getting started -If you have never used AWS Lambda or Docker before, check out this [getting started guide](https://fabianfett.de/getting-started-with-swift-aws-lambda-runtime) which helps you with every step from zero to a running Lambda. +If you have never used AWS Lambda or Docker before, check out this [getting started guide](https://swiftpackageindex.com/swift-server/swift-aws-lambda-runtime/1.0.0-alpha.3/tutorials/table-of-content) which helps you with every step from zero to a running Lambda. First, create a SwiftPM project and pull Swift AWS Lambda Runtime as dependency into your project @@ -120,32 +120,6 @@ First, add a dependency on the event packages: Modeling Lambda functions as Closures is both simple and safe. Swift AWS Lambda Runtime will ensure that the user-provided code is offloaded from the network processing thread such that even if the code becomes slow to respond or gets stuck, the underlying process can continue to function. This safety comes at a small performance penalty from context switching between threads. In many cases, the simplicity and safety of using the Closure based API is often preferred over the complexity of the performance-oriented API. -### Using EventLoopLambdaHandler - - Performance sensitive Lambda functions may choose to use a more complex API which allows user code to run on the same thread as the networking handlers. Swift AWS Lambda Runtime uses [SwiftNIO](https://github.com/apple/swift-nio) as its underlying networking engine which means the APIs are based on [SwiftNIO](https://github.com/apple/swift-nio) concurrency primitives like the `EventLoop` and `EventLoopFuture`. For example: - - ```swift - // Import the modules - import AWSLambdaRuntime - import AWSLambdaEvents - import NIO - - // Our Lambda handler, conforms to EventLoopLambdaHandler - struct Handler: EventLoopLambdaHandler { - typealias In = SNS.Message // Request type - typealias Out = Void // Response type - - // In this example we are receiving an SNS Message, with no response (Void). - func handle(context: Lambda.Context, event: In) -> EventLoopFuture { - ... - context.eventLoop.makeSucceededFuture(Void()) - } - } - - Lambda.run(Handler()) - ``` - - Beyond the small cognitive complexity of using the `EventLoopFuture` based APIs, note these APIs should be used with extra care. An [`EventLoopLambdaHandler`][ellh] will execute the user code on the same `EventLoop` (thread) as the library, making processing faster but requiring the user code to never call blocking APIs as it might prevent the underlying process from functioning. ## Deploying to AWS Lambda diff --git a/readme.md b/readme.md index ca8097e8..d437c598 100644 --- a/readme.md +++ b/readme.md @@ -128,6 +128,10 @@ This should print "dlroW olleH" ``` +## Tutorial + +[The Swift AWS Lambda Runtime docc tutorial](https://swiftpackageindex.com/swift-server/swift-aws-lambda-runtime/1.0.0-alpha.3/tutorials/table-of-content) provides developers with detailed step-by-step instructions to develop, build, and deploy a Lambda function. + ## Swift AWS Lambda Runtime Many modern systems have client components like iOS, macOS or watchOS applications as well as server components that those clients interact with. Serverless functions are often the easiest and most efficient way for client application developers to extend their applications into the cloud. @@ -142,15 +146,35 @@ Swift AWS Lambda Runtime was designed to make building Lambda functions in Swift ## Design Principles -tbd + reference to the `v2-api.md` design doc. +The [design document](Sources/AWSLambdaRuntimeCore/Documentation.docc/Proposals/0001-v2-api.md) details the v2 API proposal for the swift-aws-lambda-runtime library, which aims to enhance the developer experience for building serverless functions in Swift. -## Tutorial +The proposal has been reviewed and [incorporated feedback from the community](https://forums.swift.org/t/aws-lambda-v2-api-proposal/73819). The full v2 API design document is available [in this repository](Sources/AWSLambdaRuntimeCore/Documentation.docc/Proposals/0001-v2-api.md). + +**Key Design Principles** + +The v2 API prioritizes the following principles: + +**Readability and Maintainability**: Extensive use of `async`/`await` improves code clarity and simplifies maintenance. + +**Developer Control**: Developers own the `main()` function and have the flexibility to inject dependencies into the `LambdaRuntime`. This allows you to manage service lifecycles efficiently using [Swift Service Lifecycle](https://github.com/swift-server/swift-service-lifecycle) for structured concurrency. -link to [updated docc tutorial](https://swiftpackageindex.com/swift-server/swift-aws-lambda-runtime/1.0.0-alpha.3/tutorials/table-of-content) +**Simplified Codable Support**: The `LambdaCodableAdapter` struct eliminates the need for verbose boilerplate code when encoding and decoding events and responses. + +**New Capabilities** + +The v2 API introduces two new features: + +[Response Streaming](https://aws.amazon.com/blogs/compute/introducing-aws-lambda-response-streaming/]): This functionality is ideal for handling large responses that need to be sent incrementally.   + +[Background Work](https://aws.amazon.com/blogs/compute/running-code-after-returning-a-response-from-an-aws-lambda-function/): Schedule tasks to run after returning a response to the AWS Lambda control plane. + +These new capabilities provide greater flexibility and control when building serverless functions in Swift with the swift-aws-lambda-runtime library. ## AWSLambdaRuntime API -tbd +### Receive and respond with JSON objects + +tbd + link to docc ### Lambda Streaming Response From 9f8880b4f0e9083d8d3bad029dbe7dc51e9408b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Thu, 7 Nov 2024 10:10:36 +0100 Subject: [PATCH 068/177] formatting (#421) --- readme.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index d437c598..56a25e58 100644 --- a/readme.md +++ b/readme.md @@ -150,17 +150,17 @@ The [design document](Sources/AWSLambdaRuntimeCore/Documentation.docc/Proposals/ The proposal has been reviewed and [incorporated feedback from the community](https://forums.swift.org/t/aws-lambda-v2-api-proposal/73819). The full v2 API design document is available [in this repository](Sources/AWSLambdaRuntimeCore/Documentation.docc/Proposals/0001-v2-api.md). -**Key Design Principles** +### Key Design Principles The v2 API prioritizes the following principles: -**Readability and Maintainability**: Extensive use of `async`/`await` improves code clarity and simplifies maintenance. +- Readability and Maintainability: Extensive use of `async`/`await` improves code clarity and simplifies maintenance. -**Developer Control**: Developers own the `main()` function and have the flexibility to inject dependencies into the `LambdaRuntime`. This allows you to manage service lifecycles efficiently using [Swift Service Lifecycle](https://github.com/swift-server/swift-service-lifecycle) for structured concurrency. +- Developer Control: Developers own the `main()` function and have the flexibility to inject dependencies into the `LambdaRuntime`. This allows you to manage service lifecycles efficiently using [Swift Service Lifecycle](https://github.com/swift-server/swift-service-lifecycle) for structured concurrency. -**Simplified Codable Support**: The `LambdaCodableAdapter` struct eliminates the need for verbose boilerplate code when encoding and decoding events and responses. +- Simplified Codable Support: The `LambdaCodableAdapter` struct eliminates the need for verbose boilerplate code when encoding and decoding events and responses. -**New Capabilities** +### New Capabilities The v2 API introduces two new features: From ca82709a9b772eabeb3f4dcf992dba937a7df0a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Thu, 7 Nov 2024 11:33:34 +0100 Subject: [PATCH 069/177] Add an example and README for background tasks (#418) * add an example for background tasks * swift-format * add CI * add background task section in the main readme * minor formatting changes --- .github/workflows/pull_request.yml | 2 +- Examples/BackgroundTasks/.gitignore | 8 ++ Examples/BackgroundTasks/Package.swift | 60 +++++++++ Examples/BackgroundTasks/README.md | 119 ++++++++++++++++++ Examples/BackgroundTasks/Sources/main.swift | 52 ++++++++ Sources/AWSLambdaRuntime/Lambda+Codable.swift | 8 +- readme.md | 49 +++++++- 7 files changed, 291 insertions(+), 7 deletions(-) create mode 100644 Examples/BackgroundTasks/.gitignore create mode 100644 Examples/BackgroundTasks/Package.swift create mode 100644 Examples/BackgroundTasks/README.md create mode 100644 Examples/BackgroundTasks/Sources/main.swift diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 09b17cdf..9ad703a6 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -35,7 +35,7 @@ jobs: # We pass the list of examples here, but we can't pass an array as argument # Instead, we pass a String with a valid JSON array. # The workaround is mentioned here https://github.com/orgs/community/discussions/11692 - examples: "[ 'HelloWorld', 'APIGateway','S3_AWSSDK', 'S3_Soto' ]" + examples: "[ 'HelloWorld', 'APIGateway','S3_AWSSDK', 'S3_Soto', 'BackgroundTasks' ]" archive_plugin_enabled: true diff --git a/Examples/BackgroundTasks/.gitignore b/Examples/BackgroundTasks/.gitignore new file mode 100644 index 00000000..0023a534 --- /dev/null +++ b/Examples/BackgroundTasks/.gitignore @@ -0,0 +1,8 @@ +.DS_Store +/.build +/Packages +xcuserdata/ +DerivedData/ +.swiftpm/configuration/registries.json +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +.netrc diff --git a/Examples/BackgroundTasks/Package.swift b/Examples/BackgroundTasks/Package.swift new file mode 100644 index 00000000..84ca71ad --- /dev/null +++ b/Examples/BackgroundTasks/Package.swift @@ -0,0 +1,60 @@ +// swift-tools-version:6.0 + +import PackageDescription + +// needed for CI to test the local version of the library +import struct Foundation.URL + +#if os(macOS) +let platforms: [PackageDescription.SupportedPlatform]? = [.macOS(.v15)] +#else +let platforms: [PackageDescription.SupportedPlatform]? = nil +#endif + +let package = Package( + name: "swift-aws-lambda-runtime-example", + platforms: platforms, + products: [ + .executable(name: "BackgroundTasks", targets: ["BackgroundTasks"]) + ], + dependencies: [ + // during CI, the dependency on local version of swift-aws-lambda-runtime is added dynamically below + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main") + ], + targets: [ + .executableTarget( + name: "BackgroundTasks", + dependencies: [ + .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") + ], + path: "." + ) + ] +) + +if let localDepsPath = Context.environment["LAMBDA_USE_LOCAL_DEPS"], + localDepsPath != "", + let v = try? URL(fileURLWithPath: localDepsPath).resourceValues(forKeys: [.isDirectoryKey]), + v.isDirectory == true +{ + // when we use the local runtime as deps, let's remove the dependency added above + let indexToRemove = package.dependencies.firstIndex { dependency in + if case .sourceControl( + name: _, + location: "https://github.com/swift-server/swift-aws-lambda-runtime.git", + requirement: _ + ) = dependency.kind { + return true + } + return false + } + if let indexToRemove { + package.dependencies.remove(at: indexToRemove) + } + + // then we add the dependency on LAMBDA_USE_LOCAL_DEPS' path (typically ../..) + print("[INFO] Compiling against swift-aws-lambda-runtime located at \(localDepsPath)") + package.dependencies += [ + .package(name: "swift-aws-lambda-runtime", path: localDepsPath) + ] +} diff --git a/Examples/BackgroundTasks/README.md b/Examples/BackgroundTasks/README.md new file mode 100644 index 00000000..e1bf0ddd --- /dev/null +++ b/Examples/BackgroundTasks/README.md @@ -0,0 +1,119 @@ +# Background Tasks + +This is an example for running background tasks in an AWS Lambda function. + +Background tasks allow code to execute asynchronously after the main response has been returned, enabling additional processing without affecting response latency. This approach is ideal for scenarios like logging, data updates, or notifications that can be deferred. The code leverages Lambda's "Response Streaming" feature, which is effective for balancing real-time user responsiveness with the ability to perform extended tasks post-response. + +For more information about Lambda background tasks, see [this AWS blog post](https://aws.amazon.com/blogs/compute/running-code-after-returning-a-response-from-an-aws-lambda-function/). + +## Code + +The sample code creates a `BackgroundProcessingHandler` struct that conforms to the `LambdaWithBackgroundProcessingHandler` protocol provided by the Swift AWS Lambda Runtime. + +The `BackgroundProcessingHandler` struct defines the input and output JSON received and returned by the Handler. + +The `handle(...)` method of this protocol receives incoming events as `Input` and returns the output as a `Greeting`. The `handle(...)` methods receives an `outputWriter` parameter to write the output before the function returns, giving some opportunities to run long-lasting tasks after the response has been returned to the client but before the function returns. + +The `handle(...)` method uses the `outputWriter` to return the response as soon as possible. It then waits for 10 seconds to simulate a long background work. When the 10 seconds elapsed, the function returns. The billing cycle ends when the function returns. + +The `handle(...)` method is marked as `mutating` to allow handlers to be implemented with a `struct`. + +Once the struct is created and the `handle(...)` method is defined, the sample code creates a `LambdaCodableAdapter` adapter to adapt the `LambdaWithBackgroundProcessingHandler` to a type accepted by the `LambdaRuntime` struct. Then, the sample code initializes the `LambdaRuntime` with the adapter just created. Finally, the code calls `run()` to start the interaction with the AWS Lambda control plane. + +## Build & Package + +To build & archive the package, type the following commands. + +```bash +swift package archive --allow-network-connections docker +``` + +If there is no error, there is a ZIP file ready to deploy. +The ZIP file is located at `.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/BackgroundTasks/BackgroundTasks.zip` + +## Deploy with the AWS CLI + +Here is how to deploy using the `aws` command line. + +### Create the function + +```bash +AWS_ACCOUNT_ID=012345678901 +aws lambda create-function \ +--function-name BackgroundTasks \ +--zip-file fileb://.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/BackgroundTasks/BackgroundTasks.zip \ +--runtime provided.al2 \ +--handler provided \ +--architectures arm64 \ +--role arn:aws:iam::${AWS_ACCOUNT_ID}:role/lambda_basic_execution \ +--environment "Variables={LOG_LEVEL=debug}" \ +--timeout 15 +``` + +> [!IMPORTANT] +> The timeout value must be bigger than the time it takes for your function to complete its background tasks. Otherwise, the Lambda control plane will terminate the execution environment before your code has a chance to finish the tasks. Here, the sample function waits for 10 seconds and we set the timeout for 15 seconds. + +The `--environment` arguments sets the `LOG_LEVEL` environment variable to `debug`. This will ensure the debugging statements in the handler `context.logger.debug("...")` are printed in the Lambda function logs. + +The `--architectures` flag is only required when you build the binary on an Apple Silicon machine (Apple M1 or more recent). It defaults to `x64`. + +Be sure to set `AWS_ACCOUNT_ID` with your actual AWS account ID (for example: 012345678901). + +### Invoke your Lambda function + +To invoke the Lambda function, use `aws` command line. +```bash +aws lambda invoke \ + --function-name BackgroundTasks \ + --cli-binary-format raw-in-base64-out \ + --payload '{ "message" : "Hello Background Tasks" }' \ + response.json +``` + +This should immediately output the following result. + +``` +{ + "StatusCode": 200, + "ExecutedVersion": "$LATEST" +} +``` + +The response is visible in the `response.json` file. + +```bash +cat response.json +{"echoedMessage":"Hello Background Tasks"} +``` + +### View the function's logs + +You can observe additional messages being logged after the response is received. + +To tail the log, use the AWS CLI: +```bash +aws logs tail /aws/lambda/BackgroundTasks --follow +``` + +This produces an output like: +```text +INIT_START Runtime Version: provided:al2.v59 Runtime Version ARN: arn:aws:lambda:us-east-1::runtime:974c4a90f22278a2ef1c3f53c5c152167318aaf123fbb07c055a4885a4e97e52 +START RequestId: 4c8edd74-d776-4df9-9714-19086ab59bfd Version: $LATEST +debug LambdaRuntime : [BackgroundTasks] BackgroundProcessingHandler - message received +debug LambdaRuntime : [BackgroundTasks] BackgroundProcessingHandler - response sent. Performing background tasks. +debug LambdaRuntime : [BackgroundTasks] BackgroundProcessingHandler - Background tasks completed. Returning +END RequestId: 4c8edd74-d776-4df9-9714-19086ab59bfd +REPORT RequestId: 4c8edd74-d776-4df9-9714-19086ab59bfd Duration: 10160.89 ms Billed Duration: 10250 ms Memory Size: 128 MB Max Memory Used: 27 MB Init Duration: 88.20 ms +``` +> [!NOTE] +> The `debug` message are sent by the code inside the `handler()` function. Note that the `Duration` and `Billed Duration` on the last line are for 10.1 and 10.2 seconds respectively. + +Type CTRL-C to stop tailing the logs. + +## Cleanup + +When done testing, you can delete the Lambda function with this command. + +```bash +aws lambda delete-function --function-name BackgroundTasks +``` \ No newline at end of file diff --git a/Examples/BackgroundTasks/Sources/main.swift b/Examples/BackgroundTasks/Sources/main.swift new file mode 100644 index 00000000..929e676a --- /dev/null +++ b/Examples/BackgroundTasks/Sources/main.swift @@ -0,0 +1,52 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import AWSLambdaRuntime +import Foundation + +struct BackgroundProcessingHandler: LambdaWithBackgroundProcessingHandler { + struct Input: Decodable { + let message: String + } + + struct Greeting: Encodable { + let echoedMessage: String + } + + typealias Event = Input + typealias Output = Greeting + + func handle( + _ event: Event, + outputWriter: some LambdaResponseWriter, + context: LambdaContext + ) async throws { + // Return result to the Lambda control plane + context.logger.debug("BackgroundProcessingHandler - message received") + try await outputWriter.write(Greeting(echoedMessage: event.message)) + + // Perform some background work, e.g: + context.logger.debug("BackgroundProcessingHandler - response sent. Performing background tasks.") + try await Task.sleep(for: .seconds(10)) + + // Exit the function. All asynchronous work has been executed before exiting the scope of this function. + // Follows structured concurrency principles. + context.logger.debug("BackgroundProcessingHandler - Background tasks completed. Returning") + return + } +} + +let adapter = LambdaCodableAdapter(handler: BackgroundProcessingHandler()) +let runtime = LambdaRuntime.init(handler: adapter) +try await runtime.run() diff --git a/Sources/AWSLambdaRuntime/Lambda+Codable.swift b/Sources/AWSLambdaRuntime/Lambda+Codable.swift index 5dffbdfe..fb6d2ca7 100644 --- a/Sources/AWSLambdaRuntime/Lambda+Codable.swift +++ b/Sources/AWSLambdaRuntime/Lambda+Codable.swift @@ -60,12 +60,12 @@ public struct LambdaJSONOutputEncoder: LambdaOutputEncoder { extension LambdaCodableAdapter { /// Initializes an instance given an encoder, decoder, and a handler with a non-`Void` output. /// - Parameters: - /// - encoder: The encoder object that will be used to encode the generic `Output` obtained from the `handler`'s `outputWriter` into a `ByteBuffer`. - /// - decoder: The decoder object that will be used to decode the received `ByteBuffer` event into the generic `Event` type served to the `handler`. + /// - encoder: The encoder object that will be used to encode the generic `Output` obtained from the `handler`'s `outputWriter` into a `ByteBuffer`. By default, a JSONEncoder is used. + /// - decoder: The decoder object that will be used to decode the received `ByteBuffer` event into the generic `Event` type served to the `handler`. By default, a JSONDecoder is used. /// - handler: The handler object. public init( - encoder: JSONEncoder, - decoder: JSONDecoder, + encoder: JSONEncoder = JSONEncoder(), + decoder: JSONDecoder = JSONDecoder(), handler: Handler ) where diff --git a/readme.md b/readme.md index 56a25e58..4fcd7629 100644 --- a/readme.md +++ b/readme.md @@ -184,6 +184,51 @@ tbd + link to docc tbd + link to docc -### Background Tasks +### Use Lambda Background Tasks -tbd + link to docc +Background tasks allow code to execute asynchronously after the main response has been returned, enabling additional processing without affecting response latency. This approach is ideal for scenarios like logging, data updates, or notifications that can be deferred. The code leverages Lambda's "Response Streaming" feature, which is effective for balancing real-time user responsiveness with the ability to perform extended tasks post-response. For more information about Lambda background tasks, see [this AWS blog post](https://aws.amazon.com/blogs/compute/running-code-after-returning-a-response-from-an-aws-lambda-function/). + + +Here is an example of a minimal function that waits 10 seconds after it returned a response but before the handler returns. +```swift +import AWSLambdaRuntime +import Foundation + +struct BackgroundProcessingHandler: LambdaWithBackgroundProcessingHandler { + struct Input: Decodable { + let message: String + } + + struct Greeting: Encodable { + let echoedMessage: String + } + + typealias Event = Input + typealias Output = Greeting + + func handle( + _ event: Event, + outputWriter: some LambdaResponseWriter, + context: LambdaContext + ) async throws { + // Return result to the Lambda control plane + context.logger.debug("BackgroundProcessingHandler - message received") + try await outputWriter.write(Greeting(echoedMessage: event.message)) + + // Perform some background work, e.g: + context.logger.debug("BackgroundProcessingHandler - response sent. Performing background tasks.") + try await Task.sleep(for: .seconds(10)) + + // Exit the function. All asynchronous work has been executed before exiting the scope of this function. + // Follows structured concurrency principles. + context.logger.debug("BackgroundProcessingHandler - Background tasks completed. Returning") + return + } +} + +let adapter = LambdaCodableAdapter(handler: BackgroundProcessingHandler()) +let runtime = LambdaRuntime.init(handler: adapter) +try await runtime.run() +``` + +You can learn how to deploy and invoke this function in [the example README file](Examples/BackgroundTasks/README.md). \ No newline at end of file From 54fd25bdad26ac9d2a0cd593a82ed438dc7e9825 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Thu, 7 Nov 2024 14:55:37 +0100 Subject: [PATCH 070/177] Add example and README for a streaming Lambda function (#415) * add streaming example and doc * add streaming example to CI * fix soundness * remove unused files * correct usage of zsh env var * typo Co-authored-by: Tim Condon <0xTim@users.noreply.github.com> * typo Co-authored-by: Tim Condon <0xTim@users.noreply.github.com> * add comments Co-authored-by: Tim Condon <0xTim@users.noreply.github.com> * typo Co-authored-by: Tim Condon <0xTim@users.noreply.github.com> * add an example README with common sections + link to each example --------- Co-authored-by: Tim Condon <0xTim@users.noreply.github.com> --- .github/workflows/pull_request.yml | 2 +- Examples/APIGateway/template.yaml | 2 +- Examples/README.md | 57 +++++++ Examples/Streaming/.gitignore | 8 + Examples/Streaming/Package.swift | 60 +++++++ Examples/Streaming/README.md | 222 ++++++++++++++++++++++++++ Examples/Streaming/Sources/main.swift | 36 +++++ Examples/Streaming/template.yaml | 25 +++ readme.md | 35 +++- 9 files changed, 444 insertions(+), 3 deletions(-) create mode 100644 Examples/README.md create mode 100644 Examples/Streaming/.gitignore create mode 100644 Examples/Streaming/Package.swift create mode 100644 Examples/Streaming/README.md create mode 100644 Examples/Streaming/Sources/main.swift create mode 100644 Examples/Streaming/template.yaml diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 9ad703a6..640f6dc2 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -35,7 +35,7 @@ jobs: # We pass the list of examples here, but we can't pass an array as argument # Instead, we pass a String with a valid JSON array. # The workaround is mentioned here https://github.com/orgs/community/discussions/11692 - examples: "[ 'HelloWorld', 'APIGateway','S3_AWSSDK', 'S3_Soto', 'BackgroundTasks' ]" + examples: "[ 'HelloWorld', 'APIGateway','S3_AWSSDK', 'S3_Soto', 'Streaming', 'BackgroundTasks' ]" archive_plugin_enabled: true diff --git a/Examples/APIGateway/template.yaml b/Examples/APIGateway/template.yaml index 0d7a6af4..939f09f8 100644 --- a/Examples/APIGateway/template.yaml +++ b/Examples/APIGateway/template.yaml @@ -1,6 +1,6 @@ AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 -Description: SAM Template for QuoteService +Description: SAM Template for APIGateway Lambda Example Resources: # Lambda function diff --git a/Examples/README.md b/Examples/README.md new file mode 100644 index 00000000..4e597305 --- /dev/null +++ b/Examples/README.md @@ -0,0 +1,57 @@ +This directory contains example code for Lambda functions. + +## Pre-requisites + +- Ensure you have the Swift 6.x toolchain installed. You can [install Swift toolchains](https://www.swift.org/install/macos/) from Swift.org + +- When developing on macOS, be sure you use macOS 15 (Sequoia) or a more recent macOS version. + +- To build and archive your Lambda functions, you need to [install docker](https://docs.docker.com/desktop/install/mac-install/). + +- To deploy your Lambda functions and invoke them, you must have [an AWS account](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-creating.html) and [install and configure the `aws` command line](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). + +- Some examples are using [AWS SAM](https://aws.amazon.com/serverless/sam/). Install the [SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html) before deploying these examples. + +## Examples + +- **[API Gateway](APIGateway/README.md)**: an HTTPS REST API with [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) and a Lambda function as backend (requires [AWS SAM](https://aws.amazon.com/serverless/sam/)). + +- **[BackgroundTasks](BackgroundTasks/README.md)**: a Lambda function that continues to run background tasks after having sent the response (requires [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)). + +- **[HelloWorld](HelloWorld/README.md)**: a simple Lambda function (requires [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)). + +- **[S3_AWSSDK](S3_AWSSDK/README.md)**: a Lambda function that uses the [AWS SDK for Swift](https://docs.aws.amazon.com/sdk-for-swift/latest/developer-guide/getting-started.html) to invoke an [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) API (requires [AWS SAM](https://aws.amazon.com/serverless/sam/)). + +- **[S3_Soto](S3_Soto/README.md)**: a Lambda function that uses [Soto](https://github.com/soto-project/soto) to invoke an [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) API (requires [AWS SAM](https://aws.amazon.com/serverless/sam/)). + +- **[Streaming]**: create a Lambda function exposed as an URL. The Lambda function streams its response over time. (requires [AWS SAM](https://aws.amazon.com/serverless/sam/)). + +## AWS Credentials and Signature + +This section is a short tutorial on the AWS Signature protocol and the AWS credentials. + +**What is AWS SigV4?** + +AWS SigV4, short for "Signature Version 4," is a protocol AWS uses to authenticate and secure requests. When you, as a developer, send a request to an AWS service, AWS SigV4 makes sure the request is verified and hasn’t been tampered with. This is done through a digital signature, which is created by combining your request details with your secret AWS credentials. This signature tells AWS that the request is genuine and is coming from a user who has the right permissions. + +**How to Obtain AWS Access Keys and Session Tokens** + +To start making authenticated requests with AWS SigV4, you’ll need three main pieces of information: + +1. **Access Key ID**: This is a unique identifier for your AWS account, IAM (Identity and Access Management) user, or federated user. + +2. **Secret Access Key**: This is a secret code that only you and AWS know. It works together with your access key ID to sign requests. + +3. **Session Token (Optional)**: If you're using temporary security credentials, AWS will also provide a session token. This is usually required if you're using temporary access (e.g., through AWS STS, which provides short-lived, temporary credentials, or for federated users). + +To obtain these keys, you need an AWS account: + +1. **Sign up or Log in to AWS Console**: Go to the [AWS Management Console](https://aws.amazon.com/console/), log in, or create an AWS account if you don’t have one. + +2. **Create IAM User**: In the console, go to IAM (Identity and Access Management) and create a new user. Ensure you set permissions that match what the user will need for your application (e.g., permissions to access specific AWS services, such as AWS Lambda). + +3. **Generate Access Key and Secret Access Key**: In the IAM user settings, find the option to generate an "Access Key" and "Secret Access Key." Save these securely! You’ll need them to authenticate your requests. + +4. **(Optional) Generate Temporary Security Credentials**: If you’re using temporary credentials (which are more secure for short-term access), use AWS Security Token Service (STS). You can call the `GetSessionToken` or `AssumeRole` API to generate temporary credentials, including a session token. + +With these in hand, you can use AWS SigV4 to securely sign your requests and interact with AWS services from your Swift app. \ No newline at end of file diff --git a/Examples/Streaming/.gitignore b/Examples/Streaming/.gitignore new file mode 100644 index 00000000..0023a534 --- /dev/null +++ b/Examples/Streaming/.gitignore @@ -0,0 +1,8 @@ +.DS_Store +/.build +/Packages +xcuserdata/ +DerivedData/ +.swiftpm/configuration/registries.json +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +.netrc diff --git a/Examples/Streaming/Package.swift b/Examples/Streaming/Package.swift new file mode 100644 index 00000000..85e1d093 --- /dev/null +++ b/Examples/Streaming/Package.swift @@ -0,0 +1,60 @@ +// swift-tools-version:6.0 + +import PackageDescription + +// needed for CI to test the local version of the library +import struct Foundation.URL + +#if os(macOS) +let platforms: [PackageDescription.SupportedPlatform]? = [.macOS(.v15)] +#else +let platforms: [PackageDescription.SupportedPlatform]? = nil +#endif + +let package = Package( + name: "swift-aws-lambda-runtime-example", + platforms: platforms, + products: [ + .executable(name: "StreamingNumbers", targets: ["StreamingNumbers"]) + ], + dependencies: [ + // during CI, the dependency on local version of swift-aws-lambda-runtime is added dynamically below + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main") + ], + targets: [ + .executableTarget( + name: "StreamingNumbers", + dependencies: [ + .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") + ], + path: "." + ) + ] +) + +if let localDepsPath = Context.environment["LAMBDA_USE_LOCAL_DEPS"], + localDepsPath != "", + let v = try? URL(fileURLWithPath: localDepsPath).resourceValues(forKeys: [.isDirectoryKey]), + v.isDirectory == true +{ + // when we use the local runtime as deps, let's remove the dependency added above + let indexToRemove = package.dependencies.firstIndex { dependency in + if case .sourceControl( + name: _, + location: "https://github.com/swift-server/swift-aws-lambda-runtime.git", + requirement: _ + ) = dependency.kind { + return true + } + return false + } + if let indexToRemove { + package.dependencies.remove(at: indexToRemove) + } + + // then we add the dependency on LAMBDA_USE_LOCAL_DEPS' path (typically ../..) + print("[INFO] Compiling against swift-aws-lambda-runtime located at \(localDepsPath)") + package.dependencies += [ + .package(name: "swift-aws-lambda-runtime", path: localDepsPath) + ] +} diff --git a/Examples/Streaming/README.md b/Examples/Streaming/README.md new file mode 100644 index 00000000..86a42754 --- /dev/null +++ b/Examples/Streaming/README.md @@ -0,0 +1,222 @@ +# Streaming Lambda function + +You can configure your Lambda function to stream response payloads back to clients. Response streaming can benefit latency sensitive applications by improving time to first byte (TTFB) performance. This is because you can send partial responses back to the client as they become available. Additionally, you can use response streaming to build functions that return larger payloads. Response stream payloads have a soft limit of 20 MB as compared to the 6 MB limit for buffered responses. Streaming a response also means that your function doesn’t need to fit the entire response in memory. For very large responses, this can reduce the amount of memory you need to configure for your function. + +Streaming responses incurs a cost. For more information, see [AWS Lambda Pricing](https://aws.amazon.com/lambda/pricing/). + +You can stream responses through [Lambda function URLs](https://docs.aws.amazon.com/lambda/latest/dg/urls-configuration.html), the AWS SDK, or using the Lambda [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/dg/API_InvokeWithResponseStream.html) API. In this example, we create an authenticated Lambda function URL. + + +## Code + +The sample code creates a `SendNumbersWithPause` struct that conforms to the `StreamingLambdaHandler` protocol provided by the Swift AWS Lambda Runtime. + +The `handle(...)` method of this protocol receives incoming events as a Swift NIO `ByteBuffer` and returns the output as a `ByteBuffer`. + +The response is streamed through the `LambdaResponseStreamWriter`, which is passed as an argument in the `handle` function. The code calls the `write(_:)` function of the `LambdaResponseStreamWriter` with partial data repeatedly written before +finally closing the response stream by calling `finish()`. Developers can also choose to return the entire output and not +stream the response by calling `writeAndFinish(_:)`. + +An error is thrown if `finish()` is called multiple times or if it is called after having called `writeAndFinish(_:)`. + +The `handle(...)` method is marked as `mutating` to allow handlers to be implemented with a `struct`. + +Once the struct is created and the `handle(...)` method is defined, the sample code creates a `LambdaRuntime` struct and initializes it with the handler just created. Then, the code calls `run()` to start the interaction with the AWS Lambda control plane. + +## Build & Package + +To build & archive the package, type the following commands. + +```bash +swift package archive --allow-network-connections docker +``` + +If there is no error, there is a ZIP file ready to deploy. +The ZIP file is located at `.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/StreamingNumbers/StreamingNumbers.zip` + +## Deploy with the AWS CLI + +Here is how to deploy using the `aws` command line. + +### Step 1: Create the function + +```bash +# Replace with your AWS Account ID +AWS_ACCOUNT_ID=012345678901 +aws lambda create-function \ +--function-name StreamingNumbers \ +--zip-file fileb://.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/StreamingNumbers/StreamingNumbers.zip \ +--runtime provided.al2 \ +--handler provided \ +--architectures arm64 \ +--role arn:aws:iam::${AWS_ACCOUNT_ID}:role/lambda_basic_execution \ +--timeout 15 +``` + +> [!IMPORTANT] +> The timeout value must be bigger than the time it takes for your function to stream its output. Otherwise, the Lambda control plane will terminate the execution environment before your code has a chance to finish writing the stream. Here, the sample function stream responses during 10 seconds and we set the timeout for 15 seconds. + +The `--architectures` flag is only required when you build the binary on an Apple Silicon machine (Apple M1 or more recent). It defaults to `x64`. + +Be sure to set `AWS_ACCOUNT_ID` with your actual AWS account ID (for example: 012345678901). + +### Step2: Give permission to invoke that function through an URL + +Anyone with a valid signature from your AWS account will have permission to invoke the function through its URL. + +```bash +aws lambda add-permission \ + --function-name StreamingNumbers \ + --action lambda:InvokeFunctionUrl \ + --principal ${AWS_ACCOUNT_ID} \ + --function-url-auth-type AWS_IAM \ + --statement-id allowURL +``` + +### Step3: Create the URL + +This creates [a URL with IAM authentication](https://docs.aws.amazon.com/lambda/latest/dg/urls-auth.html). Only calls with a valid signature will be authorized. + +```bash +aws lambda create-function-url-config \ + --function-name StreamingNumbers \ + --auth-type AWS_IAM \ + --invoke-mode RESPONSE_STREAM +``` +This calls return various information, including the URL to invoke your function. + +```json +{ + "FunctionUrl": "https://ul3nf4dogmgyr7ffl5r5rs22640fwocc.lambda-url.us-east-1.on.aws/", + "FunctionArn": "arn:aws:lambda:us-east-1:012345678901:function:StreamingNumbers", + "AuthType": "AWS_IAM", + "CreationTime": "2024-10-22T07:57:23.112599Z", + "InvokeMode": "RESPONSE_STREAM" +} +``` + +### Invoke your Lambda function + +To invoke the Lambda function, use `curl` with the AWS Sigv4 option to generate the signature. + +Read the [AWS Credentials and Signature](../README.md/#AWS-Credentials-and-Signature) section for more details about the AWS Sigv4 protocol and how to obtain AWS credentials. + +When you have the `aws` command line installed and configured, you will find the credentials in the `~/.aws/credentials` file. + +```bash +URL=https://ul3nf4dogmgyr7ffl5r5rs22640fwocc.lambda-url.us-east-1.on.aws/ +REGION=us-east-1 +ACCESS_KEY=AK... +SECRET_KEY=... +AWS_SESSION_TOKEN=... + +curl "$URL" \ + --user "${ACCESS_KEY}":"${SECRET_KEY}" \ + --aws-sigv4 "aws:amz:${REGION}:lambda" \ + -H "x-amz-security-token: ${AWS_SESSION_TOKEN}" \ + --no-buffer +``` + +Note that there is no payload required for this example. + +This should output the following result, with a one-second delay between each numbers. + +``` +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +``` + +### Undeploy + +When done testing, you can delete the Lambda function with this command. + +```bash +aws lambda delete-function --function-name StreamingNumbers +``` + +## Deploy with AWS SAM + +Alternatively, you can use [AWS SAM](https://aws.amazon.com/serverless/sam/) to deploy the Lambda function. + +**Prerequisites** : Install the [SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html) + +### SAM Template + +The template file is provided as part of the example in the `template.yaml` file. It defines a Lambda function based on the binary ZIP file. It creates the function url with IAM authentication and sets the function timeout to 15 seconds. + +```yaml +AWSTemplateFormatVersion: '2010-09-09' +Transform: AWS::Serverless-2016-10-31 +Description: SAM Template for StreamingLambda Example + +Resources: + # Lambda function + StreamingNumbers: + Type: AWS::Serverless::Function + Properties: + CodeUri: .build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/StreamingNumbers/StreamingNumbers.zip + Timeout: 15 + Handler: swift.bootstrap # ignored by the Swift runtime + Runtime: provided.al2 + MemorySize: 128 + Architectures: + - arm64 + FunctionUrlConfig: + AuthType: AWS_IAM + InvokeMode: RESPONSE_STREAM + +Outputs: + # print Lambda function URL + LambdaURL: + Description: Lambda URL + Value: !GetAtt StreamingNumbersUrl.FunctionUrl +``` + +### Deploy with SAM + +```bash +sam deploy \ +--resolve-s3 \ +--template-file template.yaml \ +--stack-name StreamingNumbers \ +--capabilities CAPABILITY_IAM +``` + +The URL of the function is provided as part of the output. + +``` +CloudFormation outputs from deployed stack +----------------------------------------------------------------------------------------------------------------------------- +Outputs +----------------------------------------------------------------------------------------------------------------------------- +Key LambdaURL +Description Lambda URL +Value https://gaudpin2zjqizfujfnqxstnv6u0czrfu.lambda-url.us-east-1.on.aws/ +----------------------------------------------------------------------------------------------------------------------------- +``` + +Once the function is deployed, you can invoke it with `curl`, similarly to what you did when deploying with the AWS CLI. + +```bash +curl "$URL" \ + --user "$ACCESS_KEY":"$SECRET_KEY" \ + --aws-sigv4 "aws:amz:${REGION}:lambda" \ + -H "x-amz-security-token: $AWS_SESSION_TOKEN" \ + --no-buffer +``` + +### Undeploy with SAM + +When done testing, you can delete the infrastructure with this command. + +```bash +sam delete +``` diff --git a/Examples/Streaming/Sources/main.swift b/Examples/Streaming/Sources/main.swift new file mode 100644 index 00000000..ce92560c --- /dev/null +++ b/Examples/Streaming/Sources/main.swift @@ -0,0 +1,36 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import AWSLambdaRuntime +import NIOCore + +struct SendNumbersWithPause: StreamingLambdaHandler { + func handle( + _ event: ByteBuffer, + responseWriter: some LambdaResponseStreamWriter, + context: LambdaContext + ) async throws { + for i in 1...10 { + // Send partial data + try await responseWriter.write(ByteBuffer(string: "\(i)\n")) + // Perform some long asynchronous work + try await Task.sleep(for: .milliseconds(1000)) + } + // All data has been sent. Close off the response stream. + try await responseWriter.finish() + } +} + +let runtime = LambdaRuntime.init(handler: SendNumbersWithPause()) +try await runtime.run() diff --git a/Examples/Streaming/template.yaml b/Examples/Streaming/template.yaml new file mode 100644 index 00000000..2cc72839 --- /dev/null +++ b/Examples/Streaming/template.yaml @@ -0,0 +1,25 @@ +AWSTemplateFormatVersion: '2010-09-09' +Transform: AWS::Serverless-2016-10-31 +Description: SAM Template for Streaming Example + +Resources: + # Lambda function + StreamingNumbers: + Type: AWS::Serverless::Function + Properties: + CodeUri: .build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/StreamingNumbers/StreamingNumbers.zip + Timeout: 15 + Handler: swift.bootstrap # ignored by the Swift runtime + Runtime: provided.al2 + MemorySize: 128 + Architectures: + - arm64 + FunctionUrlConfig: + AuthType: AWS_IAM + InvokeMode: RESPONSE_STREAM + +Outputs: + # print Lambda function URL + LambdaURL: + Description: Lambda URL + Value: !GetAtt StreamingNumbersUrl.FunctionUrl diff --git a/readme.md b/readme.md index 4fcd7629..24bd135c 100644 --- a/readme.md +++ b/readme.md @@ -178,7 +178,40 @@ tbd + link to docc ### Lambda Streaming Response -tbd + link to docc +You can configure your Lambda function to stream response payloads back to clients. Response streaming can benefit latency sensitive applications by improving time to first byte (TTFB) performance. This is because you can send partial responses back to the client as they become available. Additionally, you can use response streaming to build functions that return larger payloads. Response stream payloads have a soft limit of 20 MB as compared to the 6 MB limit for buffered responses. Streaming a response also means that your function doesn’t need to fit the entire response in memory. For very large responses, this can reduce the amount of memory you need to configure for your function. + +Streaming responses incurs a cost. For more information, see [AWS Lambda Pricing](https://aws.amazon.com/lambda/pricing/). + +You can stream responses through [Lambda function URLs](https://docs.aws.amazon.com/lambda/latest/dg/urls-configuration.html), the AWS SDK, or using the Lambda [InvokeWithResponseStream](https://docs.aws.amazon.com/lambda/latest/dg/API_InvokeWithResponseStream.html) API. In this example, we create an authenticated Lambda function URL. + +Here is an example of a minimal function that streams 10 numbers with an interval of one second for each number. + +```swift +import AWSLambdaRuntime +import NIOCore + +struct SendNumbersWithPause: StreamingLambdaHandler { + func handle( + _ event: ByteBuffer, + responseWriter: some LambdaResponseStreamWriter, + context: LambdaContext + ) async throws { + for i in 1...10 { + // Send partial data + try await responseWriter.write(ByteBuffer(string: "\(i)\n")) + // Perform some long asynchronous work + try await Task.sleep(for: .milliseconds(1000)) + } + // All data has been sent. Close off the response stream. + try await responseWriter.finish() + } +} + +let runtime = LambdaRuntime.init(handler: SendNumbersWithPause()) +try await runtime.run() +``` + +You can learn how to deploy and invoke this function in [the example README file](Examples/Streaming/README.md). ### Integration with Swift Service LifeCycle From 6b4e60df1772e7f7636d10aa7a37b3587ff529ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Wed, 13 Nov 2024 12:23:10 +0100 Subject: [PATCH 071/177] add .index-build and .devcontainer to .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index a5baf2c5..f7a26a78 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .DS_Store *.build +*.index-build /.xcodeproj *.pem .podspecs @@ -10,3 +11,4 @@ Package.resolved .serverless .vscode Makefile +.devcontainer \ No newline at end of file From c22f5271a06ed41b31764691c213b8f40260332a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Wed, 13 Nov 2024 13:53:19 +0100 Subject: [PATCH 072/177] add HelloJSON example + README (#424) * add HelloJSON example + README * multiple corrections of typos and grammatical errors Co-authored-by: Tim Condon <0xTim@users.noreply.github.com> --- .github/workflows/pull_request.yml | 2 +- Examples/HelloJSON/.gitignore | 4 + Examples/HelloJSON/Package.swift | 59 ++ Examples/HelloJSON/README.md | 80 +++ Examples/HelloJSON/Sources/main.swift | 40 ++ Examples/README.md | 2 + Plugins/AWSLambdaPackager/Plugin.swift | 2 +- Plugins/AWSLambdaPackager/PluginUtils.swift | 7 +- .../Lambda+LocalServer.swift | 604 +++++++++--------- readme.md | 140 ++-- 10 files changed, 595 insertions(+), 345 deletions(-) create mode 100644 Examples/HelloJSON/.gitignore create mode 100644 Examples/HelloJSON/Package.swift create mode 100644 Examples/HelloJSON/README.md create mode 100644 Examples/HelloJSON/Sources/main.swift diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 640f6dc2..8146bb4f 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -35,7 +35,7 @@ jobs: # We pass the list of examples here, but we can't pass an array as argument # Instead, we pass a String with a valid JSON array. # The workaround is mentioned here https://github.com/orgs/community/discussions/11692 - examples: "[ 'HelloWorld', 'APIGateway','S3_AWSSDK', 'S3_Soto', 'Streaming', 'BackgroundTasks' ]" + examples: "[ 'APIGateway', 'BackgroundTasks', 'HelloJSON', 'HelloWorld', 'S3_AWSSDK', 'S3_Soto', 'Streaming' ]" archive_plugin_enabled: true diff --git a/Examples/HelloJSON/.gitignore b/Examples/HelloJSON/.gitignore new file mode 100644 index 00000000..e41d0be5 --- /dev/null +++ b/Examples/HelloJSON/.gitignore @@ -0,0 +1,4 @@ +response.json +samconfig.toml +template.yaml +Makefile diff --git a/Examples/HelloJSON/Package.swift b/Examples/HelloJSON/Package.swift new file mode 100644 index 00000000..506f0678 --- /dev/null +++ b/Examples/HelloJSON/Package.swift @@ -0,0 +1,59 @@ +// swift-tools-version:6.0 + +import PackageDescription + +// needed for CI to test the local version of the library +import struct Foundation.URL + +#if os(macOS) +let platforms: [PackageDescription.SupportedPlatform]? = [.macOS(.v15)] +#else +let platforms: [PackageDescription.SupportedPlatform]? = nil +#endif + +let package = Package( + name: "swift-aws-lambda-runtime-example", + platforms: platforms, + products: [ + .executable(name: "HelloJSON", targets: ["HelloJSON"]) + ], + dependencies: [ + // during CI, the dependency on local version of swift-aws-lambda-runtime is added dynamically below + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main") + ], + targets: [ + .executableTarget( + name: "HelloJSON", + dependencies: [ + .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") + ] + ) + ] +) + +if let localDepsPath = Context.environment["LAMBDA_USE_LOCAL_DEPS"], + localDepsPath != "", + let v = try? URL(fileURLWithPath: localDepsPath).resourceValues(forKeys: [.isDirectoryKey]), + v.isDirectory == true +{ + // when we use the local runtime as deps, let's remove the dependency added above + let indexToRemove = package.dependencies.firstIndex { dependency in + if case .sourceControl( + name: _, + location: "https://github.com/swift-server/swift-aws-lambda-runtime.git", + requirement: _ + ) = dependency.kind { + return true + } + return false + } + if let indexToRemove { + package.dependencies.remove(at: indexToRemove) + } + + // then we add the dependency on LAMBDA_USE_LOCAL_DEPS' path (typically ../..) + print("[INFO] Compiling against swift-aws-lambda-runtime located at \(localDepsPath)") + package.dependencies += [ + .package(name: "swift-aws-lambda-runtime", path: localDepsPath) + ] +} diff --git a/Examples/HelloJSON/README.md b/Examples/HelloJSON/README.md new file mode 100644 index 00000000..d3f1dc29 --- /dev/null +++ b/Examples/HelloJSON/README.md @@ -0,0 +1,80 @@ +# Hello JSON + +This is a simple example of an AWS Lambda function that takes a JSON structure as an input parameter and returns a JSON structure as a response. + +The runtime takes care of decoding the input and encoding the output. + +## Code + +The code defines `HelloRequest` and `HelloResponse` data structures to represent the input and output payloads. These structures are typically shared with a client project, such as an iOS application. + +The code creates a `LambdaRuntime` struct. In it's simplest form, the initializer takes a function as an argument. The function is the handler that will be invoked when an event triggers the Lambda function. + +The handler is `(event: HelloRequest, context: LambdaContext)`. The function takes two arguments: +- the event argument is a `HelloRequest`. It is the parameter passed when invoking the function. +- the context argument is a `Lambda Context`. It is a description of the runtime context. + +The function return value will be encoded to a `HelloResponse` as your Lambda function response. + +## Build & Package + +To build & archive the package, type the following commands. + +```bash +swift package archive --allow-network-connections docker +``` + +If there is no error, there is a ZIP file ready to deploy. +The ZIP file is located at `.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/HelloJSON/HelloJSON.zip` + +## Deploy + +Here is how to deploy using the `aws` command line. + +```bash +# Replace with your AWS Account ID +AWS_ACCOUNT_ID=012345678901 + +aws lambda create-function \ +--function-name HelloJSON \ +--zip-file fileb://.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/HelloJSON/HelloJSON.zip \ +--runtime provided.al2 \ +--handler provided \ +--architectures arm64 \ +--role arn:aws:iam::${AWS_ACCOUNT_ID}:role/lambda_basic_execution +``` + +The `--architectures` flag is only required when you build the binary on an Apple Silicon machine (Apple M1 or more recent). It defaults to `x64`. + +Be sure to define the `AWS_ACCOUNT_ID` environment variable with your actual AWS account ID (for example: 012345678901). + +## Invoke your Lambda function + +To invoke the Lambda function, use this `aws` command line. + +```bash +aws lambda invoke \ +--function-name HelloJSON \ +--payload $(echo '{ "name" : "Seb", "age" : 50 }' | base64) \ +out.txt && cat out.txt && rm out.txt +``` + +Note that the payload is expected to be a valid JSON string. + +This should output the following result. + +``` +{ + "StatusCode": 200, + "ExecutedVersion": "$LATEST" +} +{"greetings":"Hello Seb. You look younger than your age."} +``` + +## Undeploy + +When done testing, you can delete the Lambda function with this command. + +```bash +aws lambda delete-function --function-name HelloJSON +``` \ No newline at end of file diff --git a/Examples/HelloJSON/Sources/main.swift b/Examples/HelloJSON/Sources/main.swift new file mode 100644 index 00000000..7e48971b --- /dev/null +++ b/Examples/HelloJSON/Sources/main.swift @@ -0,0 +1,40 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import AWSLambdaRuntime + +// in this example we are receiving and responding with JSON structures + +// the data structure to represent the input parameter +struct HelloRequest: Decodable { + let name: String + let age: Int +} + +// the data structure to represent the output response +struct HelloResponse: Encodable { + let greetings: String +} + +// the Lambda runtime +let runtime = LambdaRuntime { + (event: HelloRequest, context: LambdaContext) in + + HelloResponse( + greetings: "Hello \(event.name). You look \(event.age > 30 ? "younger" : "older") than your age." + ) +} + +// start the loop +try await runtime.run() diff --git a/Examples/README.md b/Examples/README.md index 4e597305..3c6e4a4b 100644 --- a/Examples/README.md +++ b/Examples/README.md @@ -18,6 +18,8 @@ This directory contains example code for Lambda functions. - **[BackgroundTasks](BackgroundTasks/README.md)**: a Lambda function that continues to run background tasks after having sent the response (requires [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)). +- **[HelloJSON](HelloJSON/README.md)**: a Lambda function that accepts JSON as an input parameter and responds with a JSON output (requires [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)). + - **[HelloWorld](HelloWorld/README.md)**: a simple Lambda function (requires [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)). - **[S3_AWSSDK](S3_AWSSDK/README.md)**: a Lambda function that uses the [AWS SDK for Swift](https://docs.aws.amazon.com/sdk-for-swift/latest/developer-guide/getting-started.html) to invoke an [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) API (requires [AWS SAM](https://aws.amazon.com/serverless/sam/)). diff --git a/Plugins/AWSLambdaPackager/Plugin.swift b/Plugins/AWSLambdaPackager/Plugin.swift index 3be4b1ba..a8693945 100644 --- a/Plugins/AWSLambdaPackager/Plugin.swift +++ b/Plugins/AWSLambdaPackager/Plugin.swift @@ -74,7 +74,7 @@ struct AWSLambdaPackager: CommandPlugin { "\(archives.count > 0 ? archives.count.description : "no") archive\(archives.count != 1 ? "s" : "") created" ) for (product, archivePath) in archives { - print(" * \(product.name) at \(archivePath)") + print(" * \(product.name) at \(archivePath.path())") } } diff --git a/Plugins/AWSLambdaPackager/PluginUtils.swift b/Plugins/AWSLambdaPackager/PluginUtils.swift index 52d1b2be..f4e8cb02 100644 --- a/Plugins/AWSLambdaPackager/PluginUtils.swift +++ b/Plugins/AWSLambdaPackager/PluginUtils.swift @@ -28,6 +28,9 @@ struct Utils { ) throws -> String { if logLevel >= .debug { print("\(executable.path()) \(arguments.joined(separator: " "))") + if let customWorkingDirectory { + print("Working directory: \(customWorkingDirectory.path())") + } } let fd = dup(1) @@ -85,8 +88,8 @@ struct Utils { process.standardError = pipe process.executableURL = executable process.arguments = arguments - if let workingDirectory = customWorkingDirectory { - process.currentDirectoryURL = URL(fileURLWithPath: workingDirectory.path()) + if let customWorkingDirectory { + process.currentDirectoryURL = URL(fileURLWithPath: customWorkingDirectory.path()) } process.terminationHandler = { _ in outputQueue.async { diff --git a/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift b/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift index dc0165d4..b85affd6 100644 --- a/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift +++ b/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift @@ -12,306 +12,308 @@ // //===----------------------------------------------------------------------===// -#if DEBUG -import Dispatch -import Logging -import NIOConcurrencyHelpers -import NIOCore -import NIOHTTP1 -import NIOPosix - -// This functionality is designed for local testing hence beind a #if DEBUG flag. -// For example: -// -// try Lambda.withLocalServer { -// Lambda.run { (context: LambdaContext, event: String, callback: @escaping (Result) -> Void) in -// callback(.success("Hello, \(event)!")) +// commented out as long as we have a fix for Swift 6 language mode CI + +// #if DEBUG +// import Dispatch +// import Logging +// import NIOConcurrencyHelpers +// import NIOCore +// import NIOHTTP1 +// import NIOPosix + +// // This functionality is designed for local testing hence beind a #if DEBUG flag. +// // For example: +// // +// // try Lambda.withLocalServer { +// // Lambda.run { (context: LambdaContext, event: String, callback: @escaping (Result) -> Void) in +// // callback(.success("Hello, \(event)!")) +// // } +// // } +// extension Lambda { +// /// Execute code in the context of a mock Lambda server. +// /// +// /// - parameters: +// /// - invocationEndpoint: The endpoint to post events to. +// /// - body: Code to run within the context of the mock server. Typically this would be a Lambda.run function call. +// /// +// /// - note: This API is designed strictly for local testing and is behind a DEBUG flag +// static func withLocalServer(invocationEndpoint: String? = nil, _ body: @escaping () -> Value) throws -> Value +// { +// let server = LocalLambda.Server(invocationEndpoint: invocationEndpoint) +// try server.start().wait() +// defer { try! server.stop() } +// return body() +// } +// } + +// // MARK: - Local Mock Server + +// private enum LocalLambda { +// struct Server { +// private let logger: Logger +// private let group: EventLoopGroup +// private let host: String +// private let port: Int +// private let invocationEndpoint: String + +// init(invocationEndpoint: String?) { +// var logger = Logger(label: "LocalLambdaServer") +// logger.logLevel = .info +// self.logger = logger +// self.group = MultiThreadedEventLoopGroup(numberOfThreads: 1) +// self.host = "127.0.0.1" +// self.port = 0 +// self.invocationEndpoint = invocationEndpoint ?? "/invoke" +// } + +// func start() -> EventLoopFuture { +// let bootstrap = ServerBootstrap(group: group) +// .serverChannelOption(ChannelOptions.socket(SocketOptionLevel(SOL_SOCKET), SO_REUSEADDR), value: 1) +// .childChannelInitializer { channel in +// channel.pipeline.configureHTTPServerPipeline(withErrorHandling: true).flatMap { _ in +// channel.pipeline.addHandler( +// HTTPHandler(logger: self.logger, invocationEndpoint: self.invocationEndpoint) +// ) +// } +// } +// return bootstrap.bind(host: self.host, port: self.port).flatMap { channel -> EventLoopFuture in +// guard channel.localAddress != nil else { +// return channel.eventLoop.makeFailedFuture(ServerError.cantBind) +// } +// self.logger.info( +// "LocalLambdaServer started and listening on \(self.host):\(self.port), receiving events on \(self.invocationEndpoint)" +// ) +// return channel.eventLoop.makeSucceededFuture(()) +// } +// } + +// func stop() throws { +// try self.group.syncShutdownGracefully() +// } +// } + +// final class HTTPHandler: ChannelInboundHandler { +// public typealias InboundIn = HTTPServerRequestPart +// public typealias OutboundOut = HTTPServerResponsePart + +// private var pending = CircularBuffer<(head: HTTPRequestHead, body: ByteBuffer?)>() + +// private static var invocations = CircularBuffer() +// private static var invocationState = InvocationState.waitingForLambdaRequest + +// private let logger: Logger +// private let invocationEndpoint: String + +// init(logger: Logger, invocationEndpoint: String) { +// self.logger = logger +// self.invocationEndpoint = invocationEndpoint +// } + +// func channelRead(context: ChannelHandlerContext, data: NIOAny) { +// let requestPart = unwrapInboundIn(data) + +// switch requestPart { +// case .head(let head): +// self.pending.append((head: head, body: nil)) +// case .body(var buffer): +// var request = self.pending.removeFirst() +// if request.body == nil { +// request.body = buffer +// } else { +// request.body!.writeBuffer(&buffer) +// } +// self.pending.prepend(request) +// case .end: +// let request = self.pending.removeFirst() +// self.processRequest(context: context, request: request) +// } +// } + +// func processRequest(context: ChannelHandlerContext, request: (head: HTTPRequestHead, body: ByteBuffer?)) { +// switch (request.head.method, request.head.uri) { +// // this endpoint is called by the client invoking the lambda +// case (.POST, let url) where url.hasSuffix(self.invocationEndpoint): +// guard let work = request.body else { +// return self.writeResponse(context: context, response: .init(status: .badRequest)) +// } +// let requestID = "\(DispatchTime.now().uptimeNanoseconds)" // FIXME: +// let promise = context.eventLoop.makePromise(of: Response.self) +// promise.futureResult.whenComplete { result in +// switch result { +// case .failure(let error): +// self.logger.error("invocation error: \(error)") +// self.writeResponse(context: context, response: .init(status: .internalServerError)) +// case .success(let response): +// self.writeResponse(context: context, response: response) +// } +// } +// let invocation = Invocation(requestID: requestID, request: work, responsePromise: promise) +// switch Self.invocationState { +// case .waitingForInvocation(let promise): +// promise.succeed(invocation) +// case .waitingForLambdaRequest, .waitingForLambdaResponse: +// Self.invocations.append(invocation) +// } + +// // lambda invocation using the wrong http method +// case (_, let url) where url.hasSuffix(self.invocationEndpoint): +// self.writeResponse(context: context, status: .methodNotAllowed) + +// // /next endpoint is called by the lambda polling for work +// case (.GET, let url) where url.hasSuffix(Consts.getNextInvocationURLSuffix): +// // check if our server is in the correct state +// guard case .waitingForLambdaRequest = Self.invocationState else { +// self.logger.error("invalid invocation state \(Self.invocationState)") +// self.writeResponse(context: context, response: .init(status: .unprocessableEntity)) +// return +// } + +// // pop the first task from the queue +// switch Self.invocations.popFirst() { +// case .none: +// // if there is nothing in the queue, +// // create a promise that we can fullfill when we get a new task +// let promise = context.eventLoop.makePromise(of: Invocation.self) +// promise.futureResult.whenComplete { result in +// switch result { +// case .failure(let error): +// self.logger.error("invocation error: \(error)") +// self.writeResponse(context: context, status: .internalServerError) +// case .success(let invocation): +// Self.invocationState = .waitingForLambdaResponse(invocation) +// self.writeResponse(context: context, response: invocation.makeResponse()) +// } +// } +// Self.invocationState = .waitingForInvocation(promise) +// case .some(let invocation): +// // if there is a task pending, we can immediatly respond with it. +// Self.invocationState = .waitingForLambdaResponse(invocation) +// self.writeResponse(context: context, response: invocation.makeResponse()) +// } + +// // :requestID/response endpoint is called by the lambda posting the response +// case (.POST, let url) where url.hasSuffix(Consts.postResponseURLSuffix): +// let parts = request.head.uri.split(separator: "/") +// guard let requestID = parts.count > 2 ? String(parts[parts.count - 2]) : nil else { +// // the request is malformed, since we were expecting a requestId in the path +// return self.writeResponse(context: context, status: .badRequest) +// } +// guard case .waitingForLambdaResponse(let invocation) = Self.invocationState else { +// // a response was send, but we did not expect to receive one +// self.logger.error("invalid invocation state \(Self.invocationState)") +// return self.writeResponse(context: context, status: .unprocessableEntity) +// } +// guard requestID == invocation.requestID else { +// // the request's requestId is not matching the one we are expecting +// self.logger.error( +// "invalid invocation state request ID \(requestID) does not match expected \(invocation.requestID)" +// ) +// return self.writeResponse(context: context, status: .badRequest) +// } + +// invocation.responsePromise.succeed(.init(status: .ok, body: request.body)) +// self.writeResponse(context: context, status: .accepted) +// Self.invocationState = .waitingForLambdaRequest + +// // :requestID/error endpoint is called by the lambda posting an error response +// case (.POST, let url) where url.hasSuffix(Consts.postErrorURLSuffix): +// let parts = request.head.uri.split(separator: "/") +// guard let requestID = parts.count > 2 ? String(parts[parts.count - 2]) : nil else { +// // the request is malformed, since we were expecting a requestId in the path +// return self.writeResponse(context: context, status: .badRequest) +// } +// guard case .waitingForLambdaResponse(let invocation) = Self.invocationState else { +// // a response was send, but we did not expect to receive one +// self.logger.error("invalid invocation state \(Self.invocationState)") +// return self.writeResponse(context: context, status: .unprocessableEntity) +// } +// guard requestID == invocation.requestID else { +// // the request's requestId is not matching the one we are expecting +// self.logger.error( +// "invalid invocation state request ID \(requestID) does not match expected \(invocation.requestID)" +// ) +// return self.writeResponse(context: context, status: .badRequest) +// } + +// invocation.responsePromise.succeed(.init(status: .internalServerError, body: request.body)) +// self.writeResponse(context: context, status: .accepted) +// Self.invocationState = .waitingForLambdaRequest + +// // unknown call +// default: +// self.writeResponse(context: context, status: .notFound) +// } +// } + +// func writeResponse(context: ChannelHandlerContext, status: HTTPResponseStatus) { +// self.writeResponse(context: context, response: .init(status: status)) +// } + +// func writeResponse(context: ChannelHandlerContext, response: Response) { +// var headers = HTTPHeaders(response.headers ?? []) +// headers.add(name: "content-length", value: "\(response.body?.readableBytes ?? 0)") +// let head = HTTPResponseHead( +// version: HTTPVersion(major: 1, minor: 1), +// status: response.status, +// headers: headers +// ) + +// context.write(wrapOutboundOut(.head(head))).whenFailure { error in +// self.logger.error("\(self) write error \(error)") +// } + +// if let buffer = response.body { +// context.write(wrapOutboundOut(.body(.byteBuffer(buffer)))).whenFailure { error in +// self.logger.error("\(self) write error \(error)") +// } +// } + +// context.writeAndFlush(wrapOutboundOut(.end(nil))).whenComplete { result in +// if case .failure(let error) = result { +// self.logger.error("\(self) write error \(error)") +// } +// } +// } + +// struct Response { +// var status: HTTPResponseStatus = .ok +// var headers: [(String, String)]? +// var body: ByteBuffer? +// } + +// struct Invocation { +// let requestID: String +// let request: ByteBuffer +// let responsePromise: EventLoopPromise + +// func makeResponse() -> Response { +// var response = Response() +// response.body = self.request +// // required headers +// response.headers = [ +// (AmazonHeaders.requestID, self.requestID), +// ( +// AmazonHeaders.invokedFunctionARN, +// "arn:aws:lambda:us-east-1:\(Int16.random(in: Int16.min ... Int16.max)):function:custom-runtime" +// ), +// (AmazonHeaders.traceID, "Root=\(AmazonHeaders.generateXRayTraceID());Sampled=1"), +// (AmazonHeaders.deadline, "\(DispatchWallTime.distantFuture.millisSinceEpoch)"), +// ] +// return response +// } +// } + +// enum InvocationState { +// case waitingForInvocation(EventLoopPromise) +// case waitingForLambdaRequest +// case waitingForLambdaResponse(Invocation) +// } +// } + +// enum ServerError: Error { +// case notReady +// case cantBind // } // } -extension Lambda { - /// Execute code in the context of a mock Lambda server. - /// - /// - parameters: - /// - invocationEndpoint: The endpoint to post events to. - /// - body: Code to run within the context of the mock server. Typically this would be a Lambda.run function call. - /// - /// - note: This API is designed strictly for local testing and is behind a DEBUG flag - static func withLocalServer(invocationEndpoint: String? = nil, _ body: @escaping () -> Value) throws -> Value - { - let server = LocalLambda.Server(invocationEndpoint: invocationEndpoint) - try server.start().wait() - defer { try! server.stop() } - return body() - } -} - -// MARK: - Local Mock Server - -private enum LocalLambda { - struct Server { - private let logger: Logger - private let group: EventLoopGroup - private let host: String - private let port: Int - private let invocationEndpoint: String - - init(invocationEndpoint: String?) { - var logger = Logger(label: "LocalLambdaServer") - logger.logLevel = .info - self.logger = logger - self.group = MultiThreadedEventLoopGroup(numberOfThreads: 1) - self.host = "127.0.0.1" - self.port = 0 - self.invocationEndpoint = invocationEndpoint ?? "/invoke" - } - - func start() -> EventLoopFuture { - let bootstrap = ServerBootstrap(group: group) - .serverChannelOption(ChannelOptions.socket(SocketOptionLevel(SOL_SOCKET), SO_REUSEADDR), value: 1) - .childChannelInitializer { channel in - channel.pipeline.configureHTTPServerPipeline(withErrorHandling: true).flatMap { _ in - channel.pipeline.addHandler( - HTTPHandler(logger: self.logger, invocationEndpoint: self.invocationEndpoint) - ) - } - } - return bootstrap.bind(host: self.host, port: self.port).flatMap { channel -> EventLoopFuture in - guard channel.localAddress != nil else { - return channel.eventLoop.makeFailedFuture(ServerError.cantBind) - } - self.logger.info( - "LocalLambdaServer started and listening on \(self.host):\(self.port), receiving events on \(self.invocationEndpoint)" - ) - return channel.eventLoop.makeSucceededFuture(()) - } - } - - func stop() throws { - try self.group.syncShutdownGracefully() - } - } - - final class HTTPHandler: ChannelInboundHandler { - public typealias InboundIn = HTTPServerRequestPart - public typealias OutboundOut = HTTPServerResponsePart - - private var pending = CircularBuffer<(head: HTTPRequestHead, body: ByteBuffer?)>() - - private static var invocations = CircularBuffer() - private static var invocationState = InvocationState.waitingForLambdaRequest - - private let logger: Logger - private let invocationEndpoint: String - - init(logger: Logger, invocationEndpoint: String) { - self.logger = logger - self.invocationEndpoint = invocationEndpoint - } - - func channelRead(context: ChannelHandlerContext, data: NIOAny) { - let requestPart = unwrapInboundIn(data) - - switch requestPart { - case .head(let head): - self.pending.append((head: head, body: nil)) - case .body(var buffer): - var request = self.pending.removeFirst() - if request.body == nil { - request.body = buffer - } else { - request.body!.writeBuffer(&buffer) - } - self.pending.prepend(request) - case .end: - let request = self.pending.removeFirst() - self.processRequest(context: context, request: request) - } - } - - func processRequest(context: ChannelHandlerContext, request: (head: HTTPRequestHead, body: ByteBuffer?)) { - switch (request.head.method, request.head.uri) { - // this endpoint is called by the client invoking the lambda - case (.POST, let url) where url.hasSuffix(self.invocationEndpoint): - guard let work = request.body else { - return self.writeResponse(context: context, response: .init(status: .badRequest)) - } - let requestID = "\(DispatchTime.now().uptimeNanoseconds)" // FIXME: - let promise = context.eventLoop.makePromise(of: Response.self) - promise.futureResult.whenComplete { result in - switch result { - case .failure(let error): - self.logger.error("invocation error: \(error)") - self.writeResponse(context: context, response: .init(status: .internalServerError)) - case .success(let response): - self.writeResponse(context: context, response: response) - } - } - let invocation = Invocation(requestID: requestID, request: work, responsePromise: promise) - switch Self.invocationState { - case .waitingForInvocation(let promise): - promise.succeed(invocation) - case .waitingForLambdaRequest, .waitingForLambdaResponse: - Self.invocations.append(invocation) - } - - // lambda invocation using the wrong http method - case (_, let url) where url.hasSuffix(self.invocationEndpoint): - self.writeResponse(context: context, status: .methodNotAllowed) - - // /next endpoint is called by the lambda polling for work - case (.GET, let url) where url.hasSuffix(Consts.getNextInvocationURLSuffix): - // check if our server is in the correct state - guard case .waitingForLambdaRequest = Self.invocationState else { - self.logger.error("invalid invocation state \(Self.invocationState)") - self.writeResponse(context: context, response: .init(status: .unprocessableEntity)) - return - } - - // pop the first task from the queue - switch Self.invocations.popFirst() { - case .none: - // if there is nothing in the queue, - // create a promise that we can fullfill when we get a new task - let promise = context.eventLoop.makePromise(of: Invocation.self) - promise.futureResult.whenComplete { result in - switch result { - case .failure(let error): - self.logger.error("invocation error: \(error)") - self.writeResponse(context: context, status: .internalServerError) - case .success(let invocation): - Self.invocationState = .waitingForLambdaResponse(invocation) - self.writeResponse(context: context, response: invocation.makeResponse()) - } - } - Self.invocationState = .waitingForInvocation(promise) - case .some(let invocation): - // if there is a task pending, we can immediatly respond with it. - Self.invocationState = .waitingForLambdaResponse(invocation) - self.writeResponse(context: context, response: invocation.makeResponse()) - } - - // :requestID/response endpoint is called by the lambda posting the response - case (.POST, let url) where url.hasSuffix(Consts.postResponseURLSuffix): - let parts = request.head.uri.split(separator: "/") - guard let requestID = parts.count > 2 ? String(parts[parts.count - 2]) : nil else { - // the request is malformed, since we were expecting a requestId in the path - return self.writeResponse(context: context, status: .badRequest) - } - guard case .waitingForLambdaResponse(let invocation) = Self.invocationState else { - // a response was send, but we did not expect to receive one - self.logger.error("invalid invocation state \(Self.invocationState)") - return self.writeResponse(context: context, status: .unprocessableEntity) - } - guard requestID == invocation.requestID else { - // the request's requestId is not matching the one we are expecting - self.logger.error( - "invalid invocation state request ID \(requestID) does not match expected \(invocation.requestID)" - ) - return self.writeResponse(context: context, status: .badRequest) - } - - invocation.responsePromise.succeed(.init(status: .ok, body: request.body)) - self.writeResponse(context: context, status: .accepted) - Self.invocationState = .waitingForLambdaRequest - - // :requestID/error endpoint is called by the lambda posting an error response - case (.POST, let url) where url.hasSuffix(Consts.postErrorURLSuffix): - let parts = request.head.uri.split(separator: "/") - guard let requestID = parts.count > 2 ? String(parts[parts.count - 2]) : nil else { - // the request is malformed, since we were expecting a requestId in the path - return self.writeResponse(context: context, status: .badRequest) - } - guard case .waitingForLambdaResponse(let invocation) = Self.invocationState else { - // a response was send, but we did not expect to receive one - self.logger.error("invalid invocation state \(Self.invocationState)") - return self.writeResponse(context: context, status: .unprocessableEntity) - } - guard requestID == invocation.requestID else { - // the request's requestId is not matching the one we are expecting - self.logger.error( - "invalid invocation state request ID \(requestID) does not match expected \(invocation.requestID)" - ) - return self.writeResponse(context: context, status: .badRequest) - } - - invocation.responsePromise.succeed(.init(status: .internalServerError, body: request.body)) - self.writeResponse(context: context, status: .accepted) - Self.invocationState = .waitingForLambdaRequest - - // unknown call - default: - self.writeResponse(context: context, status: .notFound) - } - } - - func writeResponse(context: ChannelHandlerContext, status: HTTPResponseStatus) { - self.writeResponse(context: context, response: .init(status: status)) - } - - func writeResponse(context: ChannelHandlerContext, response: Response) { - var headers = HTTPHeaders(response.headers ?? []) - headers.add(name: "content-length", value: "\(response.body?.readableBytes ?? 0)") - let head = HTTPResponseHead( - version: HTTPVersion(major: 1, minor: 1), - status: response.status, - headers: headers - ) - - context.write(wrapOutboundOut(.head(head))).whenFailure { error in - self.logger.error("\(self) write error \(error)") - } - - if let buffer = response.body { - context.write(wrapOutboundOut(.body(.byteBuffer(buffer)))).whenFailure { error in - self.logger.error("\(self) write error \(error)") - } - } - - context.writeAndFlush(wrapOutboundOut(.end(nil))).whenComplete { result in - if case .failure(let error) = result { - self.logger.error("\(self) write error \(error)") - } - } - } - - struct Response { - var status: HTTPResponseStatus = .ok - var headers: [(String, String)]? - var body: ByteBuffer? - } - - struct Invocation { - let requestID: String - let request: ByteBuffer - let responsePromise: EventLoopPromise - - func makeResponse() -> Response { - var response = Response() - response.body = self.request - // required headers - response.headers = [ - (AmazonHeaders.requestID, self.requestID), - ( - AmazonHeaders.invokedFunctionARN, - "arn:aws:lambda:us-east-1:\(Int16.random(in: Int16.min ... Int16.max)):function:custom-runtime" - ), - (AmazonHeaders.traceID, "Root=\(AmazonHeaders.generateXRayTraceID());Sampled=1"), - (AmazonHeaders.deadline, "\(DispatchWallTime.distantFuture.millisSinceEpoch)"), - ] - return response - } - } - - enum InvocationState { - case waitingForInvocation(EventLoopPromise) - case waitingForLambdaRequest - case waitingForLambdaResponse(Invocation) - } - } - - enum ServerError: Error { - case notReady - case cantBind - } -} -#endif +// #endif diff --git a/readme.md b/readme.md index 24bd135c..1b3374b6 100644 --- a/readme.md +++ b/readme.md @@ -4,6 +4,18 @@ > [!WARNING] > The Swift AWS Runtime v2 is work in progress. We will add more documentation and code examples over time. +## The Swift AWS Lambda Runtime + +Many modern systems have client components like iOS, macOS or watchOS applications as well as server components that those clients interact with. Serverless functions are often the easiest and most efficient way for client application developers to extend their applications into the cloud. + +Serverless functions are increasingly becoming a popular choice for running event-driven or otherwise ad-hoc compute tasks in the cloud. They power mission critical microservices and data intensive workloads. In many cases, serverless functions allow developers to more easily scale and control compute costs given their on-demand nature. + +When using serverless functions, attention must be given to resource utilization as it directly impacts the costs of the system. This is where Swift shines! With its low memory footprint, deterministic performance, and quick start time, Swift is a fantastic match for the serverless functions architecture. + +Combine this with Swift's developer friendliness, expressiveness, and emphasis on safety, and we have a solution that is great for developers at all skill levels, scalable, and cost effective. + +Swift AWS Lambda Runtime was designed to make building Lambda functions in Swift simple and safe. The library is an implementation of the [AWS Lambda Runtime API](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html) and uses an embedded asynchronous HTTP Client based on [SwiftNIO](http://github.com/apple/swift-nio) that is fine-tuned for performance in the AWS Runtime context. The library provides a multi-tier API that allows building a range of Lambda functions: From quick and simple closures to complex, performance-sensitive event handlers. + ## Pre-requisites - Ensure you have the Swift 6.x toolchain installed. You can [install Swift toolchains](https://www.swift.org/install/macos/) from Swift.org @@ -16,7 +28,11 @@ - Some examples are using [AWS SAM](https://aws.amazon.com/serverless/sam/). Install the [SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html) before deploying these examples. -## TL;DR +## Getting started + +To get started, read [the Swift AWS Lambda runtime v1 tutorial](https://swiftpackageindex.com/swift-server/swift-aws-lambda-runtime/1.0.0-alpha.3/tutorials/table-of-content). It provides developers with detailed step-by-step instructions to develop, build, and deploy a Lambda function. + +Or, if you're impatient to start with runtime v2, try these six steps: 1. Create a new Swift executable project @@ -128,53 +144,42 @@ This should print "dlroW olleH" ``` -## Tutorial - -[The Swift AWS Lambda Runtime docc tutorial](https://swiftpackageindex.com/swift-server/swift-aws-lambda-runtime/1.0.0-alpha.3/tutorials/table-of-content) provides developers with detailed step-by-step instructions to develop, build, and deploy a Lambda function. - -## Swift AWS Lambda Runtime - -Many modern systems have client components like iOS, macOS or watchOS applications as well as server components that those clients interact with. Serverless functions are often the easiest and most efficient way for client application developers to extend their applications into the cloud. - -Serverless functions are increasingly becoming a popular choice for running event-driven or otherwise ad-hoc compute tasks in the cloud. They power mission critical microservices and data intensive workloads. In many cases, serverless functions allow developers to more easily scale and control compute costs given their on-demand nature. - -When using serverless functions, attention must be given to resource utilization as it directly impacts the costs of the system. This is where Swift shines! With its low memory footprint, deterministic performance, and quick start time, Swift is a fantastic match for the serverless functions architecture. - -Combine this with Swift's developer friendliness, expressiveness, and emphasis on safety, and we have a solution that is great for developers at all skill levels, scalable, and cost effective. - -Swift AWS Lambda Runtime was designed to make building Lambda functions in Swift simple and safe. The library is an implementation of the [AWS Lambda Runtime API](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html) and uses an embedded asynchronous HTTP Client based on [SwiftNIO](http://github.com/apple/swift-nio) that is fine-tuned for performance in the AWS Runtime context. The library provides a multi-tier API that allows building a range of Lambda functions: From quick and simple closures to complex, performance-sensitive event handlers. - -## Design Principles - -The [design document](Sources/AWSLambdaRuntimeCore/Documentation.docc/Proposals/0001-v2-api.md) details the v2 API proposal for the swift-aws-lambda-runtime library, which aims to enhance the developer experience for building serverless functions in Swift. - -The proposal has been reviewed and [incorporated feedback from the community](https://forums.swift.org/t/aws-lambda-v2-api-proposal/73819). The full v2 API design document is available [in this repository](Sources/AWSLambdaRuntimeCore/Documentation.docc/Proposals/0001-v2-api.md). - -### Key Design Principles - -The v2 API prioritizes the following principles: - -- Readability and Maintainability: Extensive use of `async`/`await` improves code clarity and simplifies maintenance. +## Developing your Swift Lambda functions -- Developer Control: Developers own the `main()` function and have the flexibility to inject dependencies into the `LambdaRuntime`. This allows you to manage service lifecycles efficiently using [Swift Service Lifecycle](https://github.com/swift-server/swift-service-lifecycle) for structured concurrency. +### Receive and respond with JSON objects -- Simplified Codable Support: The `LambdaCodableAdapter` struct eliminates the need for verbose boilerplate code when encoding and decoding events and responses. +Typically, your Lambda functions will receive an input parameter expressed as JSON and will respond with some other JSON. The Swift AWS Lambda runtime automatically takes care of encoding and decoding JSON objects when your Lambda function handler accepts `Decodable` and returns `Encodable` conforming types. -### New Capabilities +Here is an example of a minimal function that accepts a JSON object as input and responds with another JSON object. -The v2 API introduces two new features: +```swift +import AWSLambdaRuntime -[Response Streaming](https://aws.amazon.com/blogs/compute/introducing-aws-lambda-response-streaming/]): This functionality is ideal for handling large responses that need to be sent incrementally.   +// the data structure to represent the input parameter +struct HelloRequest: Decodable { + let name: String + let age: Int +} -[Background Work](https://aws.amazon.com/blogs/compute/running-code-after-returning-a-response-from-an-aws-lambda-function/): Schedule tasks to run after returning a response to the AWS Lambda control plane. +// the data structure to represent the output response +struct HelloResponse: Encodable { + let greetings: String +} -These new capabilities provide greater flexibility and control when building serverless functions in Swift with the swift-aws-lambda-runtime library. +// the Lambda runtime +let runtime = LambdaRuntime { + (event: HelloRequest, context: LambdaContext) in -## AWSLambdaRuntime API + HelloResponse( + greetings: "Hello \(event.name). You look \(event.age > 30 ? "younger" : "older") than your age." + ) +} -### Receive and respond with JSON objects +// start the loop +try await runtime.run() +``` -tbd + link to docc +You can learn how to deploy and invoke this function in [the Hello JSON example README file](Examples/HelloJSON/README.md). ### Lambda Streaming Response @@ -211,7 +216,30 @@ let runtime = LambdaRuntime.init(handler: SendNumbersWithPause()) try await runtime.run() ``` -You can learn how to deploy and invoke this function in [the example README file](Examples/Streaming/README.md). +You can learn how to deploy and invoke this function in [the streaming example README file](Examples/Streaming/README.md). + +### Integration with AWS Services + + Most Lambda functions are triggered by events originating in other AWS services such as `Amazon SNS`, `Amazon SQS` or `AWS APIGateway`. + + The [Swift AWS Lambda Events](http://github.com/swift-server/swift-aws-lambda-events) package includes an `AWSLambdaEvents` module that provides implementations for most common AWS event types further simplifying writing Lambda functions. + + Here is an example Lambda function invoked when the AWS APIGateway receives an HTTP request. + + ```swift +import AWSLambdaEvents +import AWSLambdaRuntime + +let runtime = LambdaRuntime { + (event: APIGatewayV2Request, context: LambdaContext) -> APIGatewayV2Response in + + APIGatewayV2Response(statusCode: .ok, body: "Hello World!") +} + +try await runtime.run() +``` + + You can learn how to deploy and invoke this function in [the API Gateway example README file](Examples/APIGateway/README.md). ### Integration with Swift Service LifeCycle @@ -264,4 +292,36 @@ let runtime = LambdaRuntime.init(handler: adapter) try await runtime.run() ``` -You can learn how to deploy and invoke this function in [the example README file](Examples/BackgroundTasks/README.md). \ No newline at end of file +You can learn how to deploy and invoke this function in [the background tasks example README file](Examples/BackgroundTasks/README.md). + +## Deploying your Swift Lambda functions + + +TODO + + +## Swift AWS Lambda Runtime - Design Principles + +The [design document](Sources/AWSLambdaRuntimeCore/Documentation.docc/Proposals/0001-v2-api.md) details the v2 API proposal for the swift-aws-lambda-runtime library, which aims to enhance the developer experience for building serverless functions in Swift. + +The proposal has been reviewed and [incorporated feedback from the community](https://forums.swift.org/t/aws-lambda-v2-api-proposal/73819). The full v2 API design document is available [in this repository](Sources/AWSLambdaRuntimeCore/Documentation.docc/Proposals/0001-v2-api.md). + +### Key Design Principles + +The v2 API prioritizes the following principles: + +- Readability and Maintainability: Extensive use of `async`/`await` improves code clarity and simplifies maintenance. + +- Developer Control: Developers own the `main()` function and have the flexibility to inject dependencies into the `LambdaRuntime`. This allows you to manage service lifecycles efficiently using [Swift Service Lifecycle](https://github.com/swift-server/swift-service-lifecycle) for structured concurrency. + +- Simplified Codable Support: The `LambdaCodableAdapter` struct eliminates the need for verbose boilerplate code when encoding and decoding events and responses. + +### New Capabilities + +The v2 API introduces two new features: + +[Response Streaming](https://aws.amazon.com/blogs/compute/introducing-aws-lambda-response-streaming/]): This functionality is ideal for handling large responses that need to be sent incrementally.   + +[Background Work](https://aws.amazon.com/blogs/compute/running-code-after-returning-a-response-from-an-aws-lambda-function/): Schedule tasks to run after returning a response to the AWS Lambda control plane. + +These new capabilities provide greater flexibility and control when building serverless functions in Swift with the swift-aws-lambda-runtime library. \ No newline at end of file From c0df329d1fc755080bffae869d65235315872bbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Thu, 14 Nov 2024 08:05:57 +0100 Subject: [PATCH 073/177] [CI] fix name for integration test --- .github/workflows/integration_tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/integration_tests.yml b/.github/workflows/integration_tests.yml index 71b6382a..35b46aa3 100644 --- a/.github/workflows/integration_tests.yml +++ b/.github/workflows/integration_tests.yml @@ -1,4 +1,4 @@ -name: ExamplesMatrix +name: IntegrationTests on: workflow_call: From 8724c47211d97f62b41ec18b3578b5a153f36e7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Thu, 14 Nov 2024 13:18:01 +0100 Subject: [PATCH 074/177] re-enable HTTP server for local testing (#426) --- .../Lambda+LocalServer.swift | 604 +++++++++--------- .../AWSLambdaRuntimeCore/LambdaRuntime.swift | 55 +- readme.md | 43 ++ 3 files changed, 384 insertions(+), 318 deletions(-) diff --git a/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift b/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift index b85affd6..9eed4389 100644 --- a/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift +++ b/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift @@ -14,306 +14,308 @@ // commented out as long as we have a fix for Swift 6 language mode CI -// #if DEBUG -// import Dispatch -// import Logging -// import NIOConcurrencyHelpers -// import NIOCore -// import NIOHTTP1 -// import NIOPosix - -// // This functionality is designed for local testing hence beind a #if DEBUG flag. -// // For example: -// // -// // try Lambda.withLocalServer { -// // Lambda.run { (context: LambdaContext, event: String, callback: @escaping (Result) -> Void) in -// // callback(.success("Hello, \(event)!")) -// // } -// // } -// extension Lambda { -// /// Execute code in the context of a mock Lambda server. -// /// -// /// - parameters: -// /// - invocationEndpoint: The endpoint to post events to. -// /// - body: Code to run within the context of the mock server. Typically this would be a Lambda.run function call. -// /// -// /// - note: This API is designed strictly for local testing and is behind a DEBUG flag -// static func withLocalServer(invocationEndpoint: String? = nil, _ body: @escaping () -> Value) throws -> Value -// { -// let server = LocalLambda.Server(invocationEndpoint: invocationEndpoint) -// try server.start().wait() -// defer { try! server.stop() } -// return body() -// } -// } - -// // MARK: - Local Mock Server - -// private enum LocalLambda { -// struct Server { -// private let logger: Logger -// private let group: EventLoopGroup -// private let host: String -// private let port: Int -// private let invocationEndpoint: String - -// init(invocationEndpoint: String?) { -// var logger = Logger(label: "LocalLambdaServer") -// logger.logLevel = .info -// self.logger = logger -// self.group = MultiThreadedEventLoopGroup(numberOfThreads: 1) -// self.host = "127.0.0.1" -// self.port = 0 -// self.invocationEndpoint = invocationEndpoint ?? "/invoke" -// } - -// func start() -> EventLoopFuture { -// let bootstrap = ServerBootstrap(group: group) -// .serverChannelOption(ChannelOptions.socket(SocketOptionLevel(SOL_SOCKET), SO_REUSEADDR), value: 1) -// .childChannelInitializer { channel in -// channel.pipeline.configureHTTPServerPipeline(withErrorHandling: true).flatMap { _ in -// channel.pipeline.addHandler( -// HTTPHandler(logger: self.logger, invocationEndpoint: self.invocationEndpoint) -// ) -// } -// } -// return bootstrap.bind(host: self.host, port: self.port).flatMap { channel -> EventLoopFuture in -// guard channel.localAddress != nil else { -// return channel.eventLoop.makeFailedFuture(ServerError.cantBind) -// } -// self.logger.info( -// "LocalLambdaServer started and listening on \(self.host):\(self.port), receiving events on \(self.invocationEndpoint)" -// ) -// return channel.eventLoop.makeSucceededFuture(()) -// } -// } - -// func stop() throws { -// try self.group.syncShutdownGracefully() -// } -// } - -// final class HTTPHandler: ChannelInboundHandler { -// public typealias InboundIn = HTTPServerRequestPart -// public typealias OutboundOut = HTTPServerResponsePart - -// private var pending = CircularBuffer<(head: HTTPRequestHead, body: ByteBuffer?)>() - -// private static var invocations = CircularBuffer() -// private static var invocationState = InvocationState.waitingForLambdaRequest - -// private let logger: Logger -// private let invocationEndpoint: String - -// init(logger: Logger, invocationEndpoint: String) { -// self.logger = logger -// self.invocationEndpoint = invocationEndpoint -// } - -// func channelRead(context: ChannelHandlerContext, data: NIOAny) { -// let requestPart = unwrapInboundIn(data) - -// switch requestPart { -// case .head(let head): -// self.pending.append((head: head, body: nil)) -// case .body(var buffer): -// var request = self.pending.removeFirst() -// if request.body == nil { -// request.body = buffer -// } else { -// request.body!.writeBuffer(&buffer) -// } -// self.pending.prepend(request) -// case .end: -// let request = self.pending.removeFirst() -// self.processRequest(context: context, request: request) -// } -// } - -// func processRequest(context: ChannelHandlerContext, request: (head: HTTPRequestHead, body: ByteBuffer?)) { -// switch (request.head.method, request.head.uri) { -// // this endpoint is called by the client invoking the lambda -// case (.POST, let url) where url.hasSuffix(self.invocationEndpoint): -// guard let work = request.body else { -// return self.writeResponse(context: context, response: .init(status: .badRequest)) -// } -// let requestID = "\(DispatchTime.now().uptimeNanoseconds)" // FIXME: -// let promise = context.eventLoop.makePromise(of: Response.self) -// promise.futureResult.whenComplete { result in -// switch result { -// case .failure(let error): -// self.logger.error("invocation error: \(error)") -// self.writeResponse(context: context, response: .init(status: .internalServerError)) -// case .success(let response): -// self.writeResponse(context: context, response: response) -// } -// } -// let invocation = Invocation(requestID: requestID, request: work, responsePromise: promise) -// switch Self.invocationState { -// case .waitingForInvocation(let promise): -// promise.succeed(invocation) -// case .waitingForLambdaRequest, .waitingForLambdaResponse: -// Self.invocations.append(invocation) -// } - -// // lambda invocation using the wrong http method -// case (_, let url) where url.hasSuffix(self.invocationEndpoint): -// self.writeResponse(context: context, status: .methodNotAllowed) - -// // /next endpoint is called by the lambda polling for work -// case (.GET, let url) where url.hasSuffix(Consts.getNextInvocationURLSuffix): -// // check if our server is in the correct state -// guard case .waitingForLambdaRequest = Self.invocationState else { -// self.logger.error("invalid invocation state \(Self.invocationState)") -// self.writeResponse(context: context, response: .init(status: .unprocessableEntity)) -// return -// } - -// // pop the first task from the queue -// switch Self.invocations.popFirst() { -// case .none: -// // if there is nothing in the queue, -// // create a promise that we can fullfill when we get a new task -// let promise = context.eventLoop.makePromise(of: Invocation.self) -// promise.futureResult.whenComplete { result in -// switch result { -// case .failure(let error): -// self.logger.error("invocation error: \(error)") -// self.writeResponse(context: context, status: .internalServerError) -// case .success(let invocation): -// Self.invocationState = .waitingForLambdaResponse(invocation) -// self.writeResponse(context: context, response: invocation.makeResponse()) -// } -// } -// Self.invocationState = .waitingForInvocation(promise) -// case .some(let invocation): -// // if there is a task pending, we can immediatly respond with it. -// Self.invocationState = .waitingForLambdaResponse(invocation) -// self.writeResponse(context: context, response: invocation.makeResponse()) -// } - -// // :requestID/response endpoint is called by the lambda posting the response -// case (.POST, let url) where url.hasSuffix(Consts.postResponseURLSuffix): -// let parts = request.head.uri.split(separator: "/") -// guard let requestID = parts.count > 2 ? String(parts[parts.count - 2]) : nil else { -// // the request is malformed, since we were expecting a requestId in the path -// return self.writeResponse(context: context, status: .badRequest) -// } -// guard case .waitingForLambdaResponse(let invocation) = Self.invocationState else { -// // a response was send, but we did not expect to receive one -// self.logger.error("invalid invocation state \(Self.invocationState)") -// return self.writeResponse(context: context, status: .unprocessableEntity) -// } -// guard requestID == invocation.requestID else { -// // the request's requestId is not matching the one we are expecting -// self.logger.error( -// "invalid invocation state request ID \(requestID) does not match expected \(invocation.requestID)" -// ) -// return self.writeResponse(context: context, status: .badRequest) -// } - -// invocation.responsePromise.succeed(.init(status: .ok, body: request.body)) -// self.writeResponse(context: context, status: .accepted) -// Self.invocationState = .waitingForLambdaRequest - -// // :requestID/error endpoint is called by the lambda posting an error response -// case (.POST, let url) where url.hasSuffix(Consts.postErrorURLSuffix): -// let parts = request.head.uri.split(separator: "/") -// guard let requestID = parts.count > 2 ? String(parts[parts.count - 2]) : nil else { -// // the request is malformed, since we were expecting a requestId in the path -// return self.writeResponse(context: context, status: .badRequest) -// } -// guard case .waitingForLambdaResponse(let invocation) = Self.invocationState else { -// // a response was send, but we did not expect to receive one -// self.logger.error("invalid invocation state \(Self.invocationState)") -// return self.writeResponse(context: context, status: .unprocessableEntity) -// } -// guard requestID == invocation.requestID else { -// // the request's requestId is not matching the one we are expecting -// self.logger.error( -// "invalid invocation state request ID \(requestID) does not match expected \(invocation.requestID)" -// ) -// return self.writeResponse(context: context, status: .badRequest) -// } - -// invocation.responsePromise.succeed(.init(status: .internalServerError, body: request.body)) -// self.writeResponse(context: context, status: .accepted) -// Self.invocationState = .waitingForLambdaRequest - -// // unknown call -// default: -// self.writeResponse(context: context, status: .notFound) -// } -// } - -// func writeResponse(context: ChannelHandlerContext, status: HTTPResponseStatus) { -// self.writeResponse(context: context, response: .init(status: status)) -// } - -// func writeResponse(context: ChannelHandlerContext, response: Response) { -// var headers = HTTPHeaders(response.headers ?? []) -// headers.add(name: "content-length", value: "\(response.body?.readableBytes ?? 0)") -// let head = HTTPResponseHead( -// version: HTTPVersion(major: 1, minor: 1), -// status: response.status, -// headers: headers -// ) - -// context.write(wrapOutboundOut(.head(head))).whenFailure { error in -// self.logger.error("\(self) write error \(error)") -// } - -// if let buffer = response.body { -// context.write(wrapOutboundOut(.body(.byteBuffer(buffer)))).whenFailure { error in -// self.logger.error("\(self) write error \(error)") -// } -// } - -// context.writeAndFlush(wrapOutboundOut(.end(nil))).whenComplete { result in -// if case .failure(let error) = result { -// self.logger.error("\(self) write error \(error)") -// } -// } -// } - -// struct Response { -// var status: HTTPResponseStatus = .ok -// var headers: [(String, String)]? -// var body: ByteBuffer? -// } - -// struct Invocation { -// let requestID: String -// let request: ByteBuffer -// let responsePromise: EventLoopPromise - -// func makeResponse() -> Response { -// var response = Response() -// response.body = self.request -// // required headers -// response.headers = [ -// (AmazonHeaders.requestID, self.requestID), -// ( -// AmazonHeaders.invokedFunctionARN, -// "arn:aws:lambda:us-east-1:\(Int16.random(in: Int16.min ... Int16.max)):function:custom-runtime" -// ), -// (AmazonHeaders.traceID, "Root=\(AmazonHeaders.generateXRayTraceID());Sampled=1"), -// (AmazonHeaders.deadline, "\(DispatchWallTime.distantFuture.millisSinceEpoch)"), -// ] -// return response -// } -// } - -// enum InvocationState { -// case waitingForInvocation(EventLoopPromise) -// case waitingForLambdaRequest -// case waitingForLambdaResponse(Invocation) -// } -// } - -// enum ServerError: Error { -// case notReady -// case cantBind +#if DEBUG +import Dispatch +import Logging +import NIOConcurrencyHelpers +import NIOCore +import NIOHTTP1 +import NIOPosix + +// This functionality is designed for local testing hence being a #if DEBUG flag. +// For example: +// +// try Lambda.withLocalServer { +// Lambda.run { (context: LambdaContext, event: String, callback: @escaping (Result) -> Void) in +// callback(.success("Hello, \(event)!")) // } // } -// #endif +extension Lambda { + /// Execute code in the context of a mock Lambda server. + /// + /// - parameters: + /// - invocationEndpoint: The endpoint to post events to. + /// - body: Code to run within the context of the mock server. Typically this would be a Lambda.run function call. + /// + /// - note: This API is designed strictly for local testing and is behind a DEBUG flag + static func withLocalServer( + invocationEndpoint: String? = nil, + _ body: @escaping () async throws -> Value + ) async throws -> Value { + let server = LocalLambda.Server(invocationEndpoint: invocationEndpoint) + try await server.start().get() + defer { try! server.stop() } + return try await body() + } +} + +// MARK: - Local Mock Server + +private enum LocalLambda { + struct Server { + private let logger: Logger + private let group: EventLoopGroup + private let host: String + private let port: Int + private let invocationEndpoint: String + + init(invocationEndpoint: String?) { + var logger = Logger(label: "LocalLambdaServer") + logger.logLevel = .info + self.logger = logger + self.group = MultiThreadedEventLoopGroup(numberOfThreads: 1) + self.host = "127.0.0.1" + self.port = 7000 + self.invocationEndpoint = invocationEndpoint ?? "/invoke" + } + + func start() -> EventLoopFuture { + let bootstrap = ServerBootstrap(group: group) + .serverChannelOption(ChannelOptions.socket(SocketOptionLevel(SOL_SOCKET), SO_REUSEADDR), value: 1) + .childChannelInitializer { channel in + channel.pipeline.configureHTTPServerPipeline(withErrorHandling: true).flatMap { _ in + channel.pipeline.addHandler( + HTTPHandler(logger: self.logger, invocationEndpoint: self.invocationEndpoint) + ) + } + } + return bootstrap.bind(host: self.host, port: self.port).flatMap { channel -> EventLoopFuture in + guard channel.localAddress != nil else { + return channel.eventLoop.makeFailedFuture(ServerError.cantBind) + } + self.logger.info( + "LocalLambdaServer started and listening on \(self.host):\(self.port), receiving events on \(self.invocationEndpoint)" + ) + return channel.eventLoop.makeSucceededFuture(()) + } + } + + func stop() throws { + try self.group.syncShutdownGracefully() + } + } + + final class HTTPHandler: ChannelInboundHandler { + public typealias InboundIn = HTTPServerRequestPart + public typealias OutboundOut = HTTPServerResponsePart + + private var pending = CircularBuffer<(head: HTTPRequestHead, body: ByteBuffer?)>() + + private static var invocations = CircularBuffer() + private static var invocationState = InvocationState.waitingForLambdaRequest + + private let logger: Logger + private let invocationEndpoint: String + + init(logger: Logger, invocationEndpoint: String) { + self.logger = logger + self.invocationEndpoint = invocationEndpoint + } + + func channelRead(context: ChannelHandlerContext, data: NIOAny) { + let requestPart = unwrapInboundIn(data) + + switch requestPart { + case .head(let head): + self.pending.append((head: head, body: nil)) + case .body(var buffer): + var request = self.pending.removeFirst() + if request.body == nil { + request.body = buffer + } else { + request.body!.writeBuffer(&buffer) + } + self.pending.prepend(request) + case .end: + let request = self.pending.removeFirst() + self.processRequest(context: context, request: request) + } + } + + func processRequest(context: ChannelHandlerContext, request: (head: HTTPRequestHead, body: ByteBuffer?)) { + switch (request.head.method, request.head.uri) { + // this endpoint is called by the client invoking the lambda + case (.POST, let url) where url.hasSuffix(self.invocationEndpoint): + guard let work = request.body else { + return self.writeResponse(context: context, response: .init(status: .badRequest)) + } + let requestID = "\(DispatchTime.now().uptimeNanoseconds)" // FIXME: + let promise = context.eventLoop.makePromise(of: Response.self) + promise.futureResult.whenComplete { result in + switch result { + case .failure(let error): + self.logger.error("invocation error: \(error)") + self.writeResponse(context: context, response: .init(status: .internalServerError)) + case .success(let response): + self.writeResponse(context: context, response: response) + } + } + let invocation = Invocation(requestID: requestID, request: work, responsePromise: promise) + switch Self.invocationState { + case .waitingForInvocation(let promise): + promise.succeed(invocation) + case .waitingForLambdaRequest, .waitingForLambdaResponse: + Self.invocations.append(invocation) + } + + // lambda invocation using the wrong http method + case (_, let url) where url.hasSuffix(self.invocationEndpoint): + self.writeResponse(context: context, status: .methodNotAllowed) + + // /next endpoint is called by the lambda polling for work + case (.GET, let url) where url.hasSuffix(Consts.getNextInvocationURLSuffix): + // check if our server is in the correct state + guard case .waitingForLambdaRequest = Self.invocationState else { + self.logger.error("invalid invocation state \(Self.invocationState)") + self.writeResponse(context: context, response: .init(status: .unprocessableEntity)) + return + } + + // pop the first task from the queue + switch Self.invocations.popFirst() { + case .none: + // if there is nothing in the queue, + // create a promise that we can fullfill when we get a new task + let promise = context.eventLoop.makePromise(of: Invocation.self) + promise.futureResult.whenComplete { result in + switch result { + case .failure(let error): + self.logger.error("invocation error: \(error)") + self.writeResponse(context: context, status: .internalServerError) + case .success(let invocation): + Self.invocationState = .waitingForLambdaResponse(invocation) + self.writeResponse(context: context, response: invocation.makeResponse()) + } + } + Self.invocationState = .waitingForInvocation(promise) + case .some(let invocation): + // if there is a task pending, we can immediately respond with it. + Self.invocationState = .waitingForLambdaResponse(invocation) + self.writeResponse(context: context, response: invocation.makeResponse()) + } + + // :requestID/response endpoint is called by the lambda posting the response + case (.POST, let url) where url.hasSuffix(Consts.postResponseURLSuffix): + let parts = request.head.uri.split(separator: "/") + guard let requestID = parts.count > 2 ? String(parts[parts.count - 2]) : nil else { + // the request is malformed, since we were expecting a requestId in the path + return self.writeResponse(context: context, status: .badRequest) + } + guard case .waitingForLambdaResponse(let invocation) = Self.invocationState else { + // a response was send, but we did not expect to receive one + self.logger.error("invalid invocation state \(Self.invocationState)") + return self.writeResponse(context: context, status: .unprocessableEntity) + } + guard requestID == invocation.requestID else { + // the request's requestId is not matching the one we are expecting + self.logger.error( + "invalid invocation state request ID \(requestID) does not match expected \(invocation.requestID)" + ) + return self.writeResponse(context: context, status: .badRequest) + } + + invocation.responsePromise.succeed(.init(status: .ok, body: request.body)) + self.writeResponse(context: context, status: .accepted) + Self.invocationState = .waitingForLambdaRequest + + // :requestID/error endpoint is called by the lambda posting an error response + case (.POST, let url) where url.hasSuffix(Consts.postErrorURLSuffix): + let parts = request.head.uri.split(separator: "/") + guard let requestID = parts.count > 2 ? String(parts[parts.count - 2]) : nil else { + // the request is malformed, since we were expecting a requestId in the path + return self.writeResponse(context: context, status: .badRequest) + } + guard case .waitingForLambdaResponse(let invocation) = Self.invocationState else { + // a response was send, but we did not expect to receive one + self.logger.error("invalid invocation state \(Self.invocationState)") + return self.writeResponse(context: context, status: .unprocessableEntity) + } + guard requestID == invocation.requestID else { + // the request's requestId is not matching the one we are expecting + self.logger.error( + "invalid invocation state request ID \(requestID) does not match expected \(invocation.requestID)" + ) + return self.writeResponse(context: context, status: .badRequest) + } + + invocation.responsePromise.succeed(.init(status: .internalServerError, body: request.body)) + self.writeResponse(context: context, status: .accepted) + Self.invocationState = .waitingForLambdaRequest + + // unknown call + default: + self.writeResponse(context: context, status: .notFound) + } + } + + func writeResponse(context: ChannelHandlerContext, status: HTTPResponseStatus) { + self.writeResponse(context: context, response: .init(status: status)) + } + + func writeResponse(context: ChannelHandlerContext, response: Response) { + var headers = HTTPHeaders(response.headers ?? []) + headers.add(name: "content-length", value: "\(response.body?.readableBytes ?? 0)") + let head = HTTPResponseHead( + version: HTTPVersion(major: 1, minor: 1), + status: response.status, + headers: headers + ) + + context.write(wrapOutboundOut(.head(head))).whenFailure { error in + self.logger.error("\(self) write error \(error)") + } + + if let buffer = response.body { + context.write(wrapOutboundOut(.body(.byteBuffer(buffer)))).whenFailure { error in + self.logger.error("\(self) write error \(error)") + } + } + + context.writeAndFlush(wrapOutboundOut(.end(nil))).whenComplete { result in + if case .failure(let error) = result { + self.logger.error("\(self) write error \(error)") + } + } + } + + struct Response { + var status: HTTPResponseStatus = .ok + var headers: [(String, String)]? + var body: ByteBuffer? + } + + struct Invocation { + let requestID: String + let request: ByteBuffer + let responsePromise: EventLoopPromise + + func makeResponse() -> Response { + var response = Response() + response.body = self.request + // required headers + response.headers = [ + (AmazonHeaders.requestID, self.requestID), + ( + AmazonHeaders.invokedFunctionARN, + "arn:aws:lambda:us-east-1:\(Int16.random(in: Int16.min ... Int16.max)):function:custom-runtime" + ), + (AmazonHeaders.traceID, "Root=\(AmazonHeaders.generateXRayTraceID());Sampled=1"), + (AmazonHeaders.deadline, "\(DispatchWallTime.distantFuture.millisSinceEpoch)"), + ] + return response + } + } + + enum InvocationState { + case waitingForInvocation(EventLoopPromise) + case waitingForLambdaRequest + case waitingForLambdaResponse(Invocation) + } + } + + enum ServerError: Error { + case notReady + case cantBind + } +} +#endif diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift index 726c39a4..86274836 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift @@ -43,14 +43,6 @@ public final class LambdaRuntime: @unchecked Sendable where Handler: St } public func run() async throws { - guard let runtimeEndpoint = Lambda.env("AWS_LAMBDA_RUNTIME_API") else { - throw LambdaRuntimeError(code: .missingLambdaRuntimeAPIEnvironmentVariable) - } - - let ipAndPort = runtimeEndpoint.split(separator: ":", maxSplits: 1) - let ip = String(ipAndPort[0]) - guard let port = Int(ipAndPort[1]) else { throw LambdaRuntimeError(code: .invalidPort) } - let handler = self.handlerMutex.withLockedValue { handler in let result = handler handler = nil @@ -61,16 +53,45 @@ public final class LambdaRuntime: @unchecked Sendable where Handler: St throw LambdaRuntimeError(code: .runtimeCanOnlyBeStartedOnce) } - try await LambdaRuntimeClient.withRuntimeClient( - configuration: .init(ip: ip, port: port), - eventLoop: self.eventLoop, - logger: self.logger - ) { runtimeClient in - try await Lambda.runLoop( - runtimeClient: runtimeClient, - handler: handler, + // are we running inside an AWS Lambda runtime environment ? + // AWS_LAMBDA_RUNTIME_API is set when running on Lambda + // https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html + if let runtimeEndpoint = Lambda.env("AWS_LAMBDA_RUNTIME_API") { + + let ipAndPort = runtimeEndpoint.split(separator: ":", maxSplits: 1) + let ip = String(ipAndPort[0]) + guard let port = Int(ipAndPort[1]) else { throw LambdaRuntimeError(code: .invalidPort) } + + try await LambdaRuntimeClient.withRuntimeClient( + configuration: .init(ip: ip, port: port), + eventLoop: self.eventLoop, logger: self.logger - ) + ) { runtimeClient in + try await Lambda.runLoop( + runtimeClient: runtimeClient, + handler: handler, + logger: self.logger + ) + } + + } else { + + // we're not running on Lambda, let's start a local server for testing + try await Lambda.withLocalServer(invocationEndpoint: Lambda.env("LOCAL_LAMBDA_SERVER_INVOCATION_ENDPOINT")) + { + + try await LambdaRuntimeClient.withRuntimeClient( + configuration: .init(ip: "127.0.0.1", port: 7000), + eventLoop: self.eventLoop, + logger: self.logger + ) { runtimeClient in + try await Lambda.runLoop( + runtimeClient: runtimeClient, + handler: handler, + logger: self.logger + ) + } + } } } } diff --git a/readme.md b/readme.md index 1b3374b6..7c42587e 100644 --- a/readme.md +++ b/readme.md @@ -294,6 +294,49 @@ try await runtime.run() You can learn how to deploy and invoke this function in [the background tasks example README file](Examples/BackgroundTasks/README.md). +## Testing Locally + +Before deploying your code to AWS Lambda, you can test it locally by running the executable target on your local machine. It will look like this on CLI: + +```sh +swift run +``` + +When not running inside a Lambda execution environment, it starts a local HTTP server listening on port 7000. You can invoke your local Lambda function by sending an HTTP POST request to `http://127.0.0.1:7000/invoke`. + +The request must include the JSON payload expected as an `event` by your function. You can create a text file with the JSON payload documented by AWS or captured from a trace. In this example, we used [the APIGatewayv2 JSON payload from the documentation](https://docs.aws.amazon.com/lambda/latest/dg/services-apigateway.html#apigateway-example-event), saved as `events/create-session.json` text file. + +Then we use curl to invoke the local endpoint with the test JSON payload. + +```sh +curl -v --header "Content-Type:\ application/json" --data @events/create-session.json http://127.0.0.1:7000/invoke +* Trying 127.0.0.1:7000... +* Connected to 127.0.0.1 (127.0.0.1) port 7000 +> POST /invoke HTTP/1.1 +> Host: 127.0.0.1:7000 +> User-Agent: curl/8.4.0 +> Accept: */* +> Content-Type:\ application/json +> Content-Length: 1160 +> +< HTTP/1.1 200 OK +< content-length: 247 +< +* Connection #0 to host 127.0.0.1 left intact +{"statusCode":200,"isBase64Encoded":false,"body":"...","headers":{"Access-Control-Allow-Origin":"*","Content-Type":"application\/json; charset=utf-8","Access-Control-Allow-Headers":"*"}} +``` +### Modifying the local endpoint + +By default, when using the local Lambda server, it listens on the `/invoke` endpoint. + +Some testing tools, such as the [AWS Lambda runtime interface emulator](https://docs.aws.amazon.com/lambda/latest/dg/images-test.html), require a different endpoint. In that case, you can use the `LOCAL_LAMBDA_SERVER_INVOCATION_ENDPOINT` environment variable to force the runtime to listen on a different endpoint. + +Example: + +```sh +LOCAL_LAMBDA_SERVER_INVOCATION_ENDPOINT=/2015-03-31/functions/function/invocations swift run +``` + ## Deploying your Swift Lambda functions From 21e224ea8dcccdd88378670ee63162bb5b246b7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Sat, 16 Nov 2024 10:22:01 +0100 Subject: [PATCH 075/177] Update local server for Swift 6 compliance (#428) * Update local server to Swift 6 * fix compilation error for local server in release mode * [CI] fix error for integration plugin test --- .github/workflows/integration_tests.yml | 2 +- Package.swift | 2 +- Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift | 8 ++++++-- Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift | 8 +++++++- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/.github/workflows/integration_tests.yml b/.github/workflows/integration_tests.yml index 35b46aa3..baf78508 100644 --- a/.github/workflows/integration_tests.yml +++ b/.github/workflows/integration_tests.yml @@ -114,7 +114,7 @@ jobs: pushd Examples/${EXAMPLE} # package the example (docker and swift toolchain are installed on the GH runner) - echo yes | swift package archive --allow-network-connections docker + LAMBDA_USE_LOCAL_DEPS=../.. swift package archive --allow-network-connections docker # did the plugin generated a Linux binary? [ -f ${OUTPUT_FILE} ] diff --git a/Package.swift b/Package.swift index 69f5ff36..d26d2042 100644 --- a/Package.swift +++ b/Package.swift @@ -23,7 +23,7 @@ let package = Package( .library(name: "AWSLambdaTesting", targets: ["AWSLambdaTesting"]), ], dependencies: [ - .package(url: "https://github.com/apple/swift-nio.git", from: "2.72.0"), + .package(url: "https://github.com/apple/swift-nio.git", from: "2.76.0"), .package(url: "https://github.com/apple/swift-log.git", from: "1.5.4"), ], targets: [ diff --git a/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift b/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift index 9eed4389..a23ef1cf 100644 --- a/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift +++ b/Sources/AWSLambdaRuntimeCore/Lambda+LocalServer.swift @@ -12,8 +12,6 @@ // //===----------------------------------------------------------------------===// -// commented out as long as we have a fix for Swift 6 language mode CI - #if DEBUG import Dispatch import Logging @@ -133,6 +131,10 @@ private enum LocalLambda { } func processRequest(context: ChannelHandlerContext, request: (head: HTTPRequestHead, body: ByteBuffer?)) { + + let eventLoop = context.eventLoop + let loopBoundContext = NIOLoopBound(context, eventLoop: eventLoop) + switch (request.head.method, request.head.uri) { // this endpoint is called by the client invoking the lambda case (.POST, let url) where url.hasSuffix(self.invocationEndpoint): @@ -142,6 +144,7 @@ private enum LocalLambda { let requestID = "\(DispatchTime.now().uptimeNanoseconds)" // FIXME: let promise = context.eventLoop.makePromise(of: Response.self) promise.futureResult.whenComplete { result in + let context = loopBoundContext.value switch result { case .failure(let error): self.logger.error("invocation error: \(error)") @@ -178,6 +181,7 @@ private enum LocalLambda { // create a promise that we can fullfill when we get a new task let promise = context.eventLoop.makePromise(of: Invocation.self) promise.futureResult.whenComplete { result in + let context = loopBoundContext.value switch result { case .failure(let error): self.logger.error("invocation error: \(error)") diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift index 86274836..c058bf3d 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift @@ -76,7 +76,9 @@ public final class LambdaRuntime: @unchecked Sendable where Handler: St } else { - // we're not running on Lambda, let's start a local server for testing + #if DEBUG + // we're not running on Lambda and we're compiled in DEBUG mode, + // let's start a local server for testing try await Lambda.withLocalServer(invocationEndpoint: Lambda.env("LOCAL_LAMBDA_SERVER_INVOCATION_ENDPOINT")) { @@ -92,6 +94,10 @@ public final class LambdaRuntime: @unchecked Sendable where Handler: St ) } } + #else + // in release mode, we can't start a local server because the local server code is not compiled. + throw LambdaRuntimeError(code: .missingLambdaRuntimeAPIEnvironmentVariable) + #endif } } } From 64a4d829f032c8cea649452d87e686126231129a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Tue, 26 Nov 2024 18:32:24 +0100 Subject: [PATCH 076/177] Fix CI (#429) * disable yaml linter * add semver label check * re-enable soundness checks (shell, python, and yaml) * disable checks on docc shell command * fix errors --- .github/workflows/pull_request.yml | 17 ++++++++-- .../Resources/code/03-01-01-package-init.sh | 1 + .../Resources/code/03-01-02-package-init.sh | 1 + .../Resources/code/03-01-03-package-init.sh | 1 + .../Resources/code/03-01-04-package-init.sh | 1 + .../Resources/code/03-04-03-console-output.sh | 2 ++ .../Resources/code/03-04-04-curl.sh | 2 ++ .../Resources/code/03-04-05-curl.sh | 2 ++ .../Resources/code/03-04-06-terminal.sh | 3 +- .../Resources/code/03-04-07-terminal.sh | 2 ++ .../Resources/code/03-04-08-terminal.sh | 2 ++ .../Resources/code/04-01-02-plugin-archive.sh | 2 ++ .../Resources/code/04-01-03-plugin-archive.sh | 2 ++ .../Resources/code/04-01-04-plugin-archive.sh | 2 ++ .../Resources/code/04-03-01-aws-cli.sh | 2 ++ .../code/04-03-02-lambda-invoke-hidden.sh | 2 ++ .../Resources/code/04-03-02-lambda-invoke.sh | 2 ++ .../Resources/code/04-03-03-lambda-invoke.sh | 2 ++ .../Resources/code/04-03-04-lambda-invoke.sh | 2 ++ .../Resources/code/04-03-05-lambda-invoke.sh | 2 ++ scripts/integration_tests.sh | 7 ++-- scripts/linux_performance_setup.sh | 8 ++--- scripts/performance_test.sh | 34 +++++++++---------- 23 files changed, 72 insertions(+), 29 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 8146bb4f..2b0ac9e4 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -10,11 +10,12 @@ jobs: uses: swiftlang/github-workflows/.github/workflows/soundness.yml@main with: license_header_check_project_name: "SwiftAWSLambdaRuntime" - shell_check_enabled: false - python_lint_check_enabled: false + shell_check_enabled: true + python_lint_check_enabled: true api_breakage_check_container_image: "swift:6.0-noble" docs_check_container_image: "swift:6.0-noble" format_check_container_image: "swiftlang/swift:nightly-6.0-jammy" + yamllint_check_enabled: true unit-tests: name: Unit tests @@ -43,6 +44,18 @@ jobs: name: Swift 6 Language Mode uses: apple/swift-nio/.github/workflows/swift_6_language_mode.yml@main + semver-label-check: + name: Semantic Version label check + runs-on: ubuntu-latest + timeout-minutes: 1 + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + persist-credentials: false + - name: Check for Semantic Version label + uses: apple/swift-nio/.github/actions/pull_request_semver_label_checker@main + # until there is a support for musl in swiftlang/github-workflows # https://github.com/swiftlang/github-workflows/issues/34 musl: diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-01-package-init.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-01-package-init.sh index a54719a3..be756692 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-01-package-init.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-01-package-init.sh @@ -1,2 +1,3 @@ +# shellcheck disable=all # Create a project directory mkdir SquareNumber && cd SquareNumber \ No newline at end of file diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-02-package-init.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-02-package-init.sh index a96b825c..c991cb0d 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-02-package-init.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-02-package-init.sh @@ -1,3 +1,4 @@ +# shellcheck disable=all # Create a project directory mkdir SquareNumber && cd SquareNumber # create a skeleton project diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-03-package-init.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-03-package-init.sh index aa6e4926..8afef332 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-03-package-init.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-03-package-init.sh @@ -1,3 +1,4 @@ +# shellcheck disable=all # Create a project directory mkdir SquareNumber && cd SquareNumber # create a skeleton project diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-04-package-init.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-04-package-init.sh index fc946011..89167eb5 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-04-package-init.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-04-package-init.sh @@ -1,3 +1,4 @@ +# shellcheck disable=all # Create a project directory mkdir SquareNumber && cd SquareNumber # create a skeleton project diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-03-console-output.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-03-console-output.sh index 7ba3caf2..8e4a9630 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-03-console-output.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-03-console-output.sh @@ -1,3 +1,5 @@ +# shellcheck disable=all + 2023-04-14T11:42:21+0200 info LocalLambdaServer : [AWSLambdaRuntimeCore] LocalLambdaServer started and listening on 127.0.0.1:7000, receiving events on /invoke 2023-04-14T11:42:21+0200 info Lambda : [AWSLambdaRuntimeCore] lambda runtime starting with LambdaConfiguration General(logLevel: info)) diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-04-curl.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-04-curl.sh index 46dbccc0..31102f68 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-04-curl.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-04-curl.sh @@ -1,3 +1,5 @@ +# shellcheck disable=all + curl --header "Content-Type: application/json" \ --request POST \ --data '{"number": 3}' \ diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-05-curl.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-05-curl.sh index c5dcbe12..c5f90a8c 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-05-curl.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-05-curl.sh @@ -1,3 +1,5 @@ +# shellcheck disable=all + curl --header "Content-Type: application/json" \ --request POST \ --data '{"number": 3}' \ diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-06-terminal.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-06-terminal.sh index 39c4f4d7..a6439f30 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-06-terminal.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-06-terminal.sh @@ -1,2 +1,3 @@ -export LOCAL_LAMBDA_SERVER_ENABLED=true +# shellcheck disable=all +export LOCAL_LAMBDA_SERVER_ENABLED=true diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-07-terminal.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-07-terminal.sh index f6bc5e7f..529df84f 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-07-terminal.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-07-terminal.sh @@ -1,2 +1,4 @@ +# shellcheck disable=all + export LOCAL_LAMBDA_SERVER_ENABLED=true swift run diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-08-terminal.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-08-terminal.sh index b1a57a88..38245018 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-08-terminal.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-08-terminal.sh @@ -1,3 +1,5 @@ +# shellcheck disable=all + export LOCAL_LAMBDA_SERVER_ENABLED=true swift run diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-02-plugin-archive.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-02-plugin-archive.sh index dc8fad5c..097ba893 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-02-plugin-archive.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-02-plugin-archive.sh @@ -1,2 +1,4 @@ +# shellcheck disable=all + swift package archive --allow-network-connections docker diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-03-plugin-archive.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-03-plugin-archive.sh index 0a5fc72e..b85f866b 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-03-plugin-archive.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-03-plugin-archive.sh @@ -1,3 +1,5 @@ +# shellcheck disable=all + swift package archive --allow-network-connections docker ------------------------------------------------------------------------- diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-04-plugin-archive.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-04-plugin-archive.sh index 90e47e41..93489314 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-04-plugin-archive.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-04-plugin-archive.sh @@ -1,3 +1,5 @@ +# shellcheck disable=all + swift package archive --allow-network-connections docker ------------------------------------------------------------------------- diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-01-aws-cli.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-01-aws-cli.sh index 7a33b49d..8e10fd15 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-01-aws-cli.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-01-aws-cli.sh @@ -1 +1,3 @@ +# shellcheck disable=all + aws --version diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-02-lambda-invoke-hidden.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-02-lambda-invoke-hidden.sh index 9e66559e..ae79ebc6 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-02-lambda-invoke-hidden.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-02-lambda-invoke-hidden.sh @@ -1,3 +1,5 @@ +# shellcheck disable=all + # # --region the AWS Region to send the command # --function-name the name of your function diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-02-lambda-invoke.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-02-lambda-invoke.sh index 52c3c549..ba3c2e53 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-02-lambda-invoke.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-02-lambda-invoke.sh @@ -1,3 +1,5 @@ +# shellcheck disable=all + # # --region the AWS Region to send the command # --function-name the name of your function diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-03-lambda-invoke.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-03-lambda-invoke.sh index 569e75ea..78818b3b 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-03-lambda-invoke.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-03-lambda-invoke.sh @@ -1,3 +1,5 @@ +# shellcheck disable=all + # # --region the AWS Region to send the command # --function-name the name of your function diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-04-lambda-invoke.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-04-lambda-invoke.sh index c31e7e4b..4cfb4ca8 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-04-lambda-invoke.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-04-lambda-invoke.sh @@ -1,3 +1,5 @@ +# shellcheck disable=all + # # --region the AWS Region to send the command # --function-name the name of your function diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-05-lambda-invoke.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-05-lambda-invoke.sh index 54a198bd..fa8d6653 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-05-lambda-invoke.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-05-lambda-invoke.sh @@ -1,3 +1,5 @@ +# shellcheck disable=all + # # --region the AWS Region to send the command # --function-name the name of your function diff --git a/scripts/integration_tests.sh b/scripts/integration_tests.sh index 232d743d..cb0e031b 100755 --- a/scripts/integration_tests.sh +++ b/scripts/integration_tests.sh @@ -22,13 +22,10 @@ fatal() { error "$@"; exit 1; } test -n "${SWIFT_VERSION:-}" || fatal "SWIFT_VERSION unset" test -n "${COMMAND:-}" || fatal "COMMAND unset" test -n "${EXAMPLE:-}" || fatal "EXAMPLE unset" -swift_version="$SWIFT_VERSION" -command="$COMMAND" -example="$EXAMPLE" -pushd Examples/"$example" > /dev/null +pushd Examples/"$EXAMPLE" > /dev/null log "Running command with Swift $SWIFT_VERSION" -eval "$command" +eval "$COMMAND" popd diff --git a/scripts/linux_performance_setup.sh b/scripts/linux_performance_setup.sh index 7c11cbbd..f02ac66b 100755 --- a/scripts/linux_performance_setup.sh +++ b/scripts/linux_performance_setup.sh @@ -20,14 +20,14 @@ apt-get install -y vim htop strace linux-tools-common linux-tools-generic libc6- echo 0 > /proc/sys/kernel/kptr_restrict -cd /usr/bin +pushd /usr/bin || exit 1 rm -rf perf ln -s /usr/lib/linux-tools/*/perf perf -cd - +popd || exit 1 -cd /opt +pushd /opt || exit 1 git clone https://github.com/brendangregg/FlameGraph.git -cd - +popd || exit 1 # build the code in relase mode with debug symbols # swift build -c release -Xswiftc -g diff --git a/scripts/performance_test.sh b/scripts/performance_test.sh index 65c2c244..e4157cb0 100755 --- a/scripts/performance_test.sh +++ b/scripts/performance_test.sh @@ -27,8 +27,8 @@ if [[ $(uname -s) == "Linux" ]]; then fi swift build -c release -Xswiftc -g -swift build --package-path Examples/Echo -c release -Xswiftc -g -swift build --package-path Examples/JSON -c release -Xswiftc -g +LAMBDA_USE_LOCAL_DEPS=../.. swift build --package-path Examples/HelloWorld -c release -Xswiftc -g +LAMBDA_USE_LOCAL_DEPS=../.. swift build --package-path Examples/HelloJSON -c release -Xswiftc -g cleanup() { kill -9 $server_pid # ignore-unacceptable-language @@ -58,24 +58,24 @@ kill -0 $server_pid # check server is alive # ignore-unacceptable-language echo "running $MODE mode cold test" cold=() export MAX_REQUESTS=1 -for (( i=0; i<$cold_iterations; i++ )); do +for (( i=0; i Date: Wed, 18 Dec 2024 14:34:18 +0100 Subject: [PATCH 077/177] Update release.yml (#430) Update the release.yml file with the latest label changes --- .github/release.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/release.yml b/.github/release.yml index 47505653..e29eb846 100644 --- a/.github/release.yml +++ b/.github/release.yml @@ -5,11 +5,10 @@ changelog: - ⚠️ semver/major - title: SemVer Minor labels: - - semver/minor + - 🆕 semver/minor - title: SemVer Patch labels: - - semver/patch + - 🔨 semver/patch - title: Other Changes labels: - semver/none - - "*" From 26488a7dccdce4ec8ec6788501518a7918799df5 Mon Sep 17 00:00:00 2001 From: Tobias Date: Thu, 19 Dec 2024 18:43:20 +0100 Subject: [PATCH 078/177] Adds default devcontainer configuration (#433) Adds default devcontainer configuration from SSWG: https://github.com/swift-server/swift-devcontainer-template ### Motivation: Developing for linux can be challenging on macOS because some APIs are not available on linux. By using VSCode and devcontainer you can essentially develop "on linux". ### Modifications: Adds devcontainer config. ### Result: When working in VSCode, you can now easily open the project inside a devcontainer. --- .devcontainer/devcontainer.json | 39 +++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 .devcontainer/devcontainer.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..068475e9 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,39 @@ +{ + "name": "Swift", + "image": "swift:6.0", + "features": { + "ghcr.io/devcontainers/features/common-utils:2": { + "installZsh": "false", + "username": "vscode", + "upgradePackages": "false" + }, + "ghcr.io/devcontainers/features/git:1": { + "version": "os-provided", + "ppa": "false" + } + }, + "runArgs": [ + "--cap-add=SYS_PTRACE", + "--security-opt", + "seccomp=unconfined" + ], + // Configure tool-specific properties. + "customizations": { + // Configure properties specific to VS Code. + "vscode": { + // Set *default* container specific settings.json values on container create. + "settings": { + "lldb.library": "/usr/lib/liblldb.so" + }, + // Add the IDs of extensions you want installed when the container is created. + "extensions": [ + "sswg.swift-lang" + ] + } + }, + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Set `remoteUser` to `root` to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. + "remoteUser": "vscode" +} From 23da9bf1ad6e26ea27a5c5e7f51650cb6ff54f4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Thu, 19 Dec 2024 18:49:35 +0100 Subject: [PATCH 079/177] Ensure LOG_LEVEL is correctly picked up (#435) Fix issue #434 --- Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift index c058bf3d..f10f07b1 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift @@ -39,7 +39,8 @@ public final class LambdaRuntime: @unchecked Sendable where Handler: St // this approach is less flexible but more performant than reading the value of the environment variable at each invocation var log = logger log.logLevel = Lambda.env("LOG_LEVEL").flatMap(Logger.Level.init) ?? .info - self.logger = logger + self.logger = log + self.logger.debug("LambdaRuntime initialized") } public func run() async throws { From b687a09b89470df86464ad7bfda9e758a8601e86 Mon Sep 17 00:00:00 2001 From: Fabian Fett Date: Thu, 19 Dec 2024 20:26:50 +0100 Subject: [PATCH 080/177] [core] Remove platform dance in Package.swift (#400) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sébastien Stormacq --- NOTICE.txt | 2 +- Package.swift | 8 +------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/NOTICE.txt b/NOTICE.txt index 9631ce9f..0ff96e27 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -27,7 +27,7 @@ components that this product depends on. ------------------------------------------------------------------------------- -This product contains a derivation various scripts from SwiftNIO. +This product contains a derivation various code and scripts from SwiftNIO. * LICENSE (Apache License 2.0): * https://www.apache.org/licenses/LICENSE-2.0 diff --git a/Package.swift b/Package.swift index d26d2042..d2c92fdc 100644 --- a/Package.swift +++ b/Package.swift @@ -2,15 +2,9 @@ import PackageDescription -#if os(macOS) -let platforms: [PackageDescription.SupportedPlatform]? = [.macOS(.v15)] -#else -let platforms: [PackageDescription.SupportedPlatform]? = nil -#endif - let package = Package( name: "swift-aws-lambda-runtime", - platforms: platforms, + platforms: [.macOS(.v15)], products: [ // this library exports `AWSLambdaRuntimeCore` and adds Foundation convenience methods .library(name: "AWSLambdaRuntime", targets: ["AWSLambdaRuntime"]), From 25eb6e16de9c3a49d9388851bde6bfe42228aa41 Mon Sep 17 00:00:00 2001 From: Tobias Date: Fri, 20 Dec 2024 15:21:33 +0100 Subject: [PATCH 081/177] Explicitly only use `FoundationEssentials` where possible (#436) We want that the runtime only depends on `FoundationEssentials` where available (ie. on linux) to ensure small binary size. ### Motivation: Smaller binary size is good for lambda deployment and cold-start times. The runtime should only depend on `FoundationEssentials`. ### Modifications: - replace `import Foundation` with `import FoundationEssentials` if `FoundationEssentials` is available. - I also applied the same treatment to tests to ensure that catch error where tests run on linux and we use API that is only available in `Foundation` which easily happens when you develop on macOS (where always full `Foundation` is available). ### Result: This should allow builds without linking full `Foundation`. --- Examples/BackgroundTasks/Sources/main.swift | 5 +++++ Sources/AWSLambdaRuntime/Context+Foundation.swift | 4 ++++ .../Vendored/ByteBuffer-foundation.swift | 7 ++++++- Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift | 7 ++++++- Sources/MockServer/main.swift | 8 +++++++- Tests/AWSLambdaRuntimeCoreTests/InvocationTests.swift | 7 ++++++- Tests/AWSLambdaRuntimeCoreTests/LambdaMockClient.swift | 7 ++++++- .../AWSLambdaRuntimeCoreTests/LambdaRequestIDTests.swift | 9 ++++++++- Tests/AWSLambdaRuntimeCoreTests/LambdaRunLoopTests.swift | 7 ++++++- Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift | 7 ++++++- Tests/AWSLambdaRuntimeCoreTests/Utils.swift | 4 ++++ readme.md | 4 ++++ 12 files changed, 68 insertions(+), 8 deletions(-) diff --git a/Examples/BackgroundTasks/Sources/main.swift b/Examples/BackgroundTasks/Sources/main.swift index 929e676a..1985fc34 100644 --- a/Examples/BackgroundTasks/Sources/main.swift +++ b/Examples/BackgroundTasks/Sources/main.swift @@ -13,7 +13,12 @@ //===----------------------------------------------------------------------===// import AWSLambdaRuntime + +#if canImport(FoundationEssentials) +import FoundationEssentials +#else import Foundation +#endif struct BackgroundProcessingHandler: LambdaWithBackgroundProcessingHandler { struct Input: Decodable { diff --git a/Sources/AWSLambdaRuntime/Context+Foundation.swift b/Sources/AWSLambdaRuntime/Context+Foundation.swift index a83237a7..105b7765 100644 --- a/Sources/AWSLambdaRuntime/Context+Foundation.swift +++ b/Sources/AWSLambdaRuntime/Context+Foundation.swift @@ -14,7 +14,11 @@ import AWSLambdaRuntimeCore +#if canImport(FoundationEssentials) +import FoundationEssentials +#else import struct Foundation.Date +#endif extension LambdaContext { var deadlineDate: Date { diff --git a/Sources/AWSLambdaRuntime/Vendored/ByteBuffer-foundation.swift b/Sources/AWSLambdaRuntime/Vendored/ByteBuffer-foundation.swift index e0b6cf5e..8dbd7326 100644 --- a/Sources/AWSLambdaRuntime/Vendored/ByteBuffer-foundation.swift +++ b/Sources/AWSLambdaRuntime/Vendored/ByteBuffer-foundation.swift @@ -26,9 +26,14 @@ // //===----------------------------------------------------------------------===// -import Foundation import NIOCore +#if canImport(FoundationEssentials) +import FoundationEssentials +#else +import Foundation +#endif + // This is NIO's `NIOFoundationCompat` module which at the moment only adds `ByteBuffer` utility methods // for Foundation's `Data` type. // diff --git a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift index f10f07b1..317ee7ea 100644 --- a/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift +++ b/Sources/AWSLambdaRuntimeCore/LambdaRuntime.swift @@ -12,11 +12,16 @@ // //===----------------------------------------------------------------------===// -import Foundation import Logging import NIOConcurrencyHelpers import NIOCore +#if canImport(FoundationEssentials) +import FoundationEssentials +#else +import Foundation +#endif + // We need `@unchecked` Sendable here, as `NIOLockedValueBox` does not understand `sending` today. // We don't want to use `NIOLockedValueBox` here anyway. We would love to use Mutex here, but this // sadly crashes the compiler today. diff --git a/Sources/MockServer/main.swift b/Sources/MockServer/main.swift index 9bed33bd..1b8466f9 100644 --- a/Sources/MockServer/main.swift +++ b/Sources/MockServer/main.swift @@ -12,11 +12,17 @@ // //===----------------------------------------------------------------------===// -import Foundation +import Dispatch import NIOCore import NIOHTTP1 import NIOPosix +#if canImport(FoundationEssentials) +import FoundationEssentials +#else +import Foundation +#endif + struct MockServer { private let group: EventLoopGroup private let host: String diff --git a/Tests/AWSLambdaRuntimeCoreTests/InvocationTests.swift b/Tests/AWSLambdaRuntimeCoreTests/InvocationTests.swift index 86bfaae9..fca58391 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/InvocationTests.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/InvocationTests.swift @@ -12,12 +12,17 @@ // //===----------------------------------------------------------------------===// -import Foundation import NIOHTTP1 import Testing @testable import AWSLambdaRuntimeCore +#if canImport(FoundationEssentials) +import FoundationEssentials +#else +import Foundation +#endif + @Suite struct InvocationTest { @Test diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaMockClient.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaMockClient.swift index 15a30223..613276ed 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/LambdaMockClient.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/LambdaMockClient.swift @@ -13,10 +13,15 @@ //===----------------------------------------------------------------------===// import AWSLambdaRuntimeCore -import Foundation import Logging import NIOCore +#if canImport(FoundationEssentials) +import FoundationEssentials +#else +import Foundation +#endif + struct LambdaMockWriter: LambdaRuntimeClientResponseStreamWriter { var underlying: LambdaMockClient diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaRequestIDTests.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaRequestIDTests.swift index 9e406fdf..45886c64 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/LambdaRequestIDTests.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/LambdaRequestIDTests.swift @@ -12,12 +12,17 @@ // //===----------------------------------------------------------------------===// -import Foundation import NIOCore import Testing @testable import AWSLambdaRuntimeCore +#if canImport(FoundationEssentials) +import FoundationEssentials +#else +import Foundation +#endif + @Suite("LambdaRequestID tests") struct LambdaRequestIDTest { @Test @@ -100,6 +105,7 @@ struct LambdaRequestIDTest { #expect(buffer.readableBytes == readableBeforeRead) } + #if os(macOS) @Test func testInitFromNSStringSuccess() { let nsString = NSMutableString(capacity: 16) @@ -121,6 +127,7 @@ struct LambdaRequestIDTest { #expect(requestID?.uuidString == LambdaRequestID(uuidString: nsString as String)?.uuidString) #expect(requestID?.uppercased == nsString as String) } + #endif @Test func testUnparse() { diff --git a/Tests/AWSLambdaRuntimeCoreTests/LambdaRunLoopTests.swift b/Tests/AWSLambdaRuntimeCoreTests/LambdaRunLoopTests.swift index 741bbf50..f57f051b 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/LambdaRunLoopTests.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/LambdaRunLoopTests.swift @@ -12,13 +12,18 @@ // //===----------------------------------------------------------------------===// -import Foundation import Logging import NIOCore import Testing @testable import AWSLambdaRuntimeCore +#if canImport(FoundationEssentials) +import FoundationEssentials +#else +import Foundation +#endif + @Suite struct LambdaRunLoopTests { struct MockEchoHandler: StreamingLambdaHandler { diff --git a/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift b/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift index cc3c4ac2..dc325742 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/MockLambdaServer.swift @@ -12,7 +12,6 @@ // //===----------------------------------------------------------------------===// -import Foundation // for JSON import Logging import NIOCore import NIOHTTP1 @@ -20,6 +19,12 @@ import NIOPosix @testable import AWSLambdaRuntimeCore +#if canImport(FoundationEssentials) +import FoundationEssentials +#else +import Foundation +#endif + func withMockServer( behaviour: some LambdaServerBehavior, port: Int = 0, diff --git a/Tests/AWSLambdaRuntimeCoreTests/Utils.swift b/Tests/AWSLambdaRuntimeCoreTests/Utils.swift index cd7730b7..49a3cfbb 100644 --- a/Tests/AWSLambdaRuntimeCoreTests/Utils.swift +++ b/Tests/AWSLambdaRuntimeCoreTests/Utils.swift @@ -12,7 +12,11 @@ // //===----------------------------------------------------------------------===// +#if canImport(FoundationEssentials) +import FoundationEssentials +#else import Foundation +#endif extension Date { var millisSinceEpoch: Int64 { diff --git a/readme.md b/readme.md index 7c42587e..0717c3e3 100644 --- a/readme.md +++ b/readme.md @@ -253,7 +253,11 @@ Background tasks allow code to execute asynchronously after the main response ha Here is an example of a minimal function that waits 10 seconds after it returned a response but before the handler returns. ```swift import AWSLambdaRuntime +#if canImport(FoundationEssentials) +import FoundationEssentials +#else import Foundation +#endif struct BackgroundProcessingHandler: LambdaWithBackgroundProcessingHandler { struct Input: Decodable { From 18660fcdd1cdaee43550dfa47df554b7e297702a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Sat, 21 Dec 2024 10:39:13 +0100 Subject: [PATCH 082/177] [examples] Add CDK deployment example (#431) added an example showing how to deploy with the CDK This code is the basis for the upcoming CDK section in the deployment guide --- .licenseignore | 2 + Examples/CDK/Package.swift | 62 + Examples/CDK/README.md | 121 ++ Examples/CDK/Sources/main.swift | 40 + Examples/CDK/infra/.gitignore | 9 + Examples/CDK/infra/.npmignore | 6 + Examples/CDK/infra/README.md | 14 + Examples/CDK/infra/bin/deploy.ts | 19 + Examples/CDK/infra/cdk.json | 81 ++ .../CDK/infra/lib/lambda-api-project-stack.ts | 54 + Examples/CDK/infra/package-lock.json | 1176 +++++++++++++++++ Examples/CDK/infra/package.json | 23 + Examples/CDK/infra/tsconfig.json | 31 + Examples/README.md | 6 +- 14 files changed, 1643 insertions(+), 1 deletion(-) create mode 100644 Examples/CDK/Package.swift create mode 100644 Examples/CDK/README.md create mode 100644 Examples/CDK/Sources/main.swift create mode 100644 Examples/CDK/infra/.gitignore create mode 100644 Examples/CDK/infra/.npmignore create mode 100644 Examples/CDK/infra/README.md create mode 100644 Examples/CDK/infra/bin/deploy.ts create mode 100644 Examples/CDK/infra/cdk.json create mode 100644 Examples/CDK/infra/lib/lambda-api-project-stack.ts create mode 100644 Examples/CDK/infra/package-lock.json create mode 100644 Examples/CDK/infra/package.json create mode 100644 Examples/CDK/infra/tsconfig.json diff --git a/.licenseignore b/.licenseignore index 796c53d5..db42f1da 100644 --- a/.licenseignore +++ b/.licenseignore @@ -32,3 +32,5 @@ Package.resolved .swiftformat *.yaml *.yml +**/.npmignore +**/*.json \ No newline at end of file diff --git a/Examples/CDK/Package.swift b/Examples/CDK/Package.swift new file mode 100644 index 00000000..ebaac99a --- /dev/null +++ b/Examples/CDK/Package.swift @@ -0,0 +1,62 @@ +// swift-tools-version:6.0 + +import PackageDescription + +// needed for CI to test the local version of the library +import struct Foundation.URL + +#if os(macOS) +let platforms: [PackageDescription.SupportedPlatform]? = [.macOS(.v15)] +#else +let platforms: [PackageDescription.SupportedPlatform]? = nil +#endif + +let package = Package( + name: "swift-aws-lambda-runtime-example", + platforms: platforms, + products: [ + .executable(name: "APIGatewayLambda", targets: ["APIGatewayLambda"]) + ], + dependencies: [ + // during CI, the dependency on local version of swift-aws-lambda-runtime is added dynamically below + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main"), + .package(url: "https://github.com/swift-server/swift-aws-lambda-events.git", branch: "main"), + ], + targets: [ + .executableTarget( + name: "APIGatewayLambda", + dependencies: [ + .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), + .product(name: "AWSLambdaEvents", package: "swift-aws-lambda-events"), + ], + path: "." + ) + ] +) + +if let localDepsPath = Context.environment["LAMBDA_USE_LOCAL_DEPS"], + localDepsPath != "", + let v = try? URL(fileURLWithPath: localDepsPath).resourceValues(forKeys: [.isDirectoryKey]), + v.isDirectory == true +{ + // when we use the local runtime as deps, let's remove the dependency added above + let indexToRemove = package.dependencies.firstIndex { dependency in + if case .sourceControl( + name: _, + location: "https://github.com/swift-server/swift-aws-lambda-runtime.git", + requirement: _ + ) = dependency.kind { + return true + } + return false + } + if let indexToRemove { + package.dependencies.remove(at: indexToRemove) + } + + // then we add the dependency on LAMBDA_USE_LOCAL_DEPS' path (typically ../..) + print("[INFO] Compiling against swift-aws-lambda-runtime located at \(localDepsPath)") + package.dependencies += [ + .package(name: "swift-aws-lambda-runtime", path: localDepsPath) + ] +} diff --git a/Examples/CDK/README.md b/Examples/CDK/README.md new file mode 100644 index 00000000..69b772ec --- /dev/null +++ b/Examples/CDK/README.md @@ -0,0 +1,121 @@ +# API Gateway and Cloud Development Kit + +This is a simple example of an AWS Lambda function invoked through an Amazon API Gateway and deployed with the Cloud Development Kit (CDK). + +## Code + +The Lambda function takes all HTTP headers it receives as input and returns them as output. See the [API Gateway example](Examples/APIGateway/README.md) for a complete description of the code. + +## Build & Package + +To build the package, type the following commands. + +```bash +swift build +swift package archive --allow-network-connections docker +``` + +If there is no error, there is a ZIP file ready to deploy. +The ZIP file is located at `.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/APIGatewayLambda/APIGatewayLambda.zip` + +## Deploy + +>[NOTE] +>Before deploying the infrastructure, you need to have NodeJS and the AWS CDK installed and configured. +>For more information, see the [AWS CDK documentation](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html). + +To deploy the infrastructure, type the following commands. + +```sh +# Change to the infra directory +cd infra + +# Install the dependencies (only before the first deployment) +npm install + +cdk deploy + +✨ Synthesis time: 2.88s +... redacted for brevity ... +Do you wish to deploy these changes (y/n)? y +... redacted for brevity ... + ✅ LambdaApiStack + +✨ Deployment time: 42.96s + +Outputs: +LambdaApiStack.ApiUrl = https://tyqnjcawh0.execute-api.eu-central-1.amazonaws.com/ +Stack ARN: +arn:aws:cloudformation:eu-central-1:401955065246:stack/LambdaApiStack/e0054390-be05-11ef-9504-065628de4b89 + +✨ Total time: 45.84s +``` + +## Invoke your Lambda function + +To invoke the Lambda function, use this `curl` command line. + +```bash +curl https://tyqnjcawh0.execute-api.eu-central-1.amazonaws.com +``` + +Be sure to replace the URL with the API Gateway endpoint returned in the previous step. + +This should print a JSON similar to + +```bash +{"version":"2.0","rawPath":"\/","isBase64Encoded":false,"rawQueryString":"","headers":{"user-agent":"curl\/8.7.1","accept":"*\/*","host":"a5q74es3k2.execute-api.us-east-1.amazonaws.com","content-length":"0","x-amzn-trace-id":"Root=1-66fb0388-691f744d4bd3c99c7436a78d","x-forwarded-port":"443","x-forwarded-for":"81.0.0.43","x-forwarded-proto":"https"},"requestContext":{"requestId":"e719cgNpoAMEcwA=","http":{"sourceIp":"81.0.0.43","path":"\/","protocol":"HTTP\/1.1","userAgent":"curl\/8.7.1","method":"GET"},"stage":"$default","apiId":"a5q74es3k2","time":"30\/Sep\/2024:20:01:12 +0000","timeEpoch":1727726472922,"domainPrefix":"a5q74es3k2","domainName":"a5q74es3k2.execute-api.us-east-1.amazonaws.com","accountId":"012345678901"} +``` + +If you have `jq` installed, you can use it to pretty print the output. + +```bash +curl -s https://tyqnjcawh0.execute-api.eu-central-1.amazonaws.com | jq +{ + "version": "2.0", + "rawPath": "/", + "requestContext": { + "domainPrefix": "a5q74es3k2", + "stage": "$default", + "timeEpoch": 1727726558220, + "http": { + "protocol": "HTTP/1.1", + "method": "GET", + "userAgent": "curl/8.7.1", + "path": "/", + "sourceIp": "81.0.0.43" + }, + "apiId": "a5q74es3k2", + "accountId": "012345678901", + "requestId": "e72KxgsRoAMEMSA=", + "domainName": "a5q74es3k2.execute-api.us-east-1.amazonaws.com", + "time": "30/Sep/2024:20:02:38 +0000" + }, + "rawQueryString": "", + "routeKey": "$default", + "headers": { + "x-forwarded-for": "81.0.0.43", + "user-agent": "curl/8.7.1", + "host": "a5q74es3k2.execute-api.us-east-1.amazonaws.com", + "accept": "*/*", + "x-amzn-trace-id": "Root=1-66fb03de-07533930192eaf5f540db0cb", + "content-length": "0", + "x-forwarded-proto": "https", + "x-forwarded-port": "443" + }, + "isBase64Encoded": false +} +``` + +## Undeploy + +When done testing, you can delete the infrastructure with this command. + +```bash +cdk destroy + +Are you sure you want to delete: LambdaApiStack (y/n)? y +LambdaApiStack: destroying... [1/1] +... redacted for brevity ... + ✅ LambdaApiStack: destroyed +``` \ No newline at end of file diff --git a/Examples/CDK/Sources/main.swift b/Examples/CDK/Sources/main.swift new file mode 100644 index 00000000..2d5707d6 --- /dev/null +++ b/Examples/CDK/Sources/main.swift @@ -0,0 +1,40 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import AWSLambdaEvents +import AWSLambdaRuntime + +#if canImport(FoundationEssentials) +import FoundationEssentials +#else +import Foundation +#endif + +let encoder = JSONEncoder() +let runtime = LambdaRuntime { + (event: APIGatewayV2Request, context: LambdaContext) -> APIGatewayV2Response in + + var header = HTTPHeaders() + context.logger.debug("HTTP API Message received") + + header["content-type"] = "application/json" + + // echo the request in the response + let data = try encoder.encode(event) + let response = String(decoding: data, as: Unicode.UTF8.self) + + return APIGatewayV2Response(statusCode: .ok, headers: header, body: response) +} + +try await runtime.run() diff --git a/Examples/CDK/infra/.gitignore b/Examples/CDK/infra/.gitignore new file mode 100644 index 00000000..a08f1af9 --- /dev/null +++ b/Examples/CDK/infra/.gitignore @@ -0,0 +1,9 @@ +*.js +!jest.config.js +*.d.ts +node_modules + +# CDK asset staging directory +.cdk.staging +cdk.out + diff --git a/Examples/CDK/infra/.npmignore b/Examples/CDK/infra/.npmignore new file mode 100644 index 00000000..c1d6d45d --- /dev/null +++ b/Examples/CDK/infra/.npmignore @@ -0,0 +1,6 @@ +*.ts +!*.d.ts + +# CDK asset staging directory +.cdk.staging +cdk.out diff --git a/Examples/CDK/infra/README.md b/Examples/CDK/infra/README.md new file mode 100644 index 00000000..9315fe5b --- /dev/null +++ b/Examples/CDK/infra/README.md @@ -0,0 +1,14 @@ +# Welcome to your CDK TypeScript project + +This is a blank project for CDK development with TypeScript. + +The `cdk.json` file tells the CDK Toolkit how to execute your app. + +## Useful commands + +* `npm run build` compile typescript to js +* `npm run watch` watch for changes and compile +* `npm run test` perform the jest unit tests +* `npx cdk deploy` deploy this stack to your default AWS account/region +* `npx cdk diff` compare deployed stack with current state +* `npx cdk synth` emits the synthesized CloudFormation template diff --git a/Examples/CDK/infra/bin/deploy.ts b/Examples/CDK/infra/bin/deploy.ts new file mode 100644 index 00000000..a83096da --- /dev/null +++ b/Examples/CDK/infra/bin/deploy.ts @@ -0,0 +1,19 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import * as cdk from 'aws-cdk-lib'; +import { LambdaApiStack } from '../lib/lambda-api-project-stack'; + +const app = new cdk.App(); +new LambdaApiStack(app, 'LambdaApiStack'); diff --git a/Examples/CDK/infra/cdk.json b/Examples/CDK/infra/cdk.json new file mode 100644 index 00000000..06b03d2f --- /dev/null +++ b/Examples/CDK/infra/cdk.json @@ -0,0 +1,81 @@ +{ + "app": "npx ts-node --prefer-ts-exts bin/deploy.ts", + "watch": { + "include": [ + "**" + ], + "exclude": [ + "README.md", + "cdk*.json", + "**/*.d.ts", + "**/*.js", + "tsconfig.json", + "package*.json", + "yarn.lock", + "node_modules", + "test" + ] + }, + "context": { + "@aws-cdk/aws-lambda:recognizeLayerVersion": true, + "@aws-cdk/core:checkSecretUsage": true, + "@aws-cdk/core:target-partitions": [ + "aws", + "aws-cn" + ], + "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true, + "@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true, + "@aws-cdk/aws-ecs:arnFormatIncludesClusterName": true, + "@aws-cdk/aws-iam:minimizePolicies": true, + "@aws-cdk/core:validateSnapshotRemovalPolicy": true, + "@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName": true, + "@aws-cdk/aws-s3:createDefaultLoggingPolicy": true, + "@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption": true, + "@aws-cdk/aws-apigateway:disableCloudWatchRole": true, + "@aws-cdk/core:enablePartitionLiterals": true, + "@aws-cdk/aws-events:eventsTargetQueueSameAccount": true, + "@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker": true, + "@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName": true, + "@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy": true, + "@aws-cdk/aws-route53-patters:useCertificate": true, + "@aws-cdk/customresources:installLatestAwsSdkDefault": false, + "@aws-cdk/aws-rds:databaseProxyUniqueResourceName": true, + "@aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup": true, + "@aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId": true, + "@aws-cdk/aws-ec2:launchTemplateDefaultUserData": true, + "@aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachments": true, + "@aws-cdk/aws-redshift:columnId": true, + "@aws-cdk/aws-stepfunctions-tasks:enableEmrServicePolicyV2": true, + "@aws-cdk/aws-ec2:restrictDefaultSecurityGroup": true, + "@aws-cdk/aws-apigateway:requestValidatorUniqueId": true, + "@aws-cdk/aws-kms:aliasNameRef": true, + "@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig": true, + "@aws-cdk/core:includePrefixInUniqueNameGeneration": true, + "@aws-cdk/aws-efs:denyAnonymousAccess": true, + "@aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby": true, + "@aws-cdk/aws-lambda-nodejs:useLatestRuntimeVersion": true, + "@aws-cdk/aws-efs:mountTargetOrderInsensitiveLogicalId": true, + "@aws-cdk/aws-rds:auroraClusterChangeScopeOfInstanceParameterGroupWithEachParameters": true, + "@aws-cdk/aws-appsync:useArnForSourceApiAssociationIdentifier": true, + "@aws-cdk/aws-rds:preventRenderingDeprecatedCredentials": true, + "@aws-cdk/aws-codepipeline-actions:useNewDefaultBranchForCodeCommitSource": true, + "@aws-cdk/aws-cloudwatch-actions:changeLambdaPermissionLogicalIdForLambdaAction": true, + "@aws-cdk/aws-codepipeline:crossAccountKeysDefaultValueToFalse": true, + "@aws-cdk/aws-codepipeline:defaultPipelineTypeToV2": true, + "@aws-cdk/aws-kms:reduceCrossAccountRegionPolicyScope": true, + "@aws-cdk/aws-eks:nodegroupNameAttribute": true, + "@aws-cdk/aws-ec2:ebsDefaultGp3Volume": true, + "@aws-cdk/aws-ecs:removeDefaultDeploymentAlarm": true, + "@aws-cdk/custom-resources:logApiResponseDataPropertyTrueDefault": false, + "@aws-cdk/aws-s3:keepNotificationInImportedBucket": false, + "@aws-cdk/aws-ecs:reduceEc2FargateCloudWatchPermissions": true, + "@aws-cdk/aws-dynamodb:resourcePolicyPerReplica": true, + "@aws-cdk/aws-ec2:ec2SumTImeoutEnabled": true, + "@aws-cdk/aws-appsync:appSyncGraphQLAPIScopeLambdaPermission": true, + "@aws-cdk/aws-rds:setCorrectValueForDatabaseInstanceReadReplicaInstanceResourceId": true, + "@aws-cdk/core:cfnIncludeRejectComplexResourceUpdateCreatePolicyIntrinsics": true, + "@aws-cdk/aws-lambda-nodejs:sdkV3ExcludeSmithyPackages": true, + "@aws-cdk/aws-stepfunctions-tasks:fixRunEcsTaskPolicy": true, + "@aws-cdk/aws-ec2:bastionHostUseAmazonLinux2023ByDefault": true + } +} diff --git a/Examples/CDK/infra/lib/lambda-api-project-stack.ts b/Examples/CDK/infra/lib/lambda-api-project-stack.ts new file mode 100644 index 00000000..3598478c --- /dev/null +++ b/Examples/CDK/infra/lib/lambda-api-project-stack.ts @@ -0,0 +1,54 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import * as cdk from 'aws-cdk-lib'; +import * as lambda from 'aws-cdk-lib/aws-lambda'; +import * as apigateway from 'aws-cdk-lib/aws-apigatewayv2'; +import { HttpLambdaIntegration } from 'aws-cdk-lib/aws-apigatewayv2-integrations'; + +export class LambdaApiStack extends cdk.Stack { + constructor(scope: cdk.App, id: string, props?: cdk.StackProps) { + super(scope, id, props); + + // Create the Lambda function + const lambdaFunction = new lambda.Function(this, 'SwiftLambdaFunction', { + runtime: lambda.Runtime.PROVIDED_AL2, + architecture: lambda.Architecture.ARM_64, + handler: 'bootstrap', + code: lambda.Code.fromAsset('../.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/APIGatewayLambda/APIGatewayLambda.zip'), + memorySize: 512, + timeout: cdk.Duration.seconds(30), + environment: { + LOG_LEVEL: 'debug', + }, + }); + + // Create the integration + const integration = new HttpLambdaIntegration( + 'LambdaIntegration', + lambdaFunction + ); + + // Create HTTP API with the integration + const httpApi = new apigateway.HttpApi(this, 'HttpApi', { + defaultIntegration: integration, + }); + + // Output the API URL + new cdk.CfnOutput(this, 'ApiUrl', { + value: httpApi.url ?? 'Something went wrong', + }); + } +} + diff --git a/Examples/CDK/infra/package-lock.json b/Examples/CDK/infra/package-lock.json new file mode 100644 index 00000000..f91106b7 --- /dev/null +++ b/Examples/CDK/infra/package-lock.json @@ -0,0 +1,1176 @@ +{ + "name": "deploy", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "deploy", + "version": "0.1.0", + "dependencies": { + "aws-cdk-lib": "^2.173.1", + "constructs": "^10.4.2" + }, + "bin": { + "deploy": "bin/deploy.js" + }, + "devDependencies": { + "@types/jest": "^29.5.14", + "@types/node": "22.7.9", + "aws-cdk": "2.173.1", + "ts-node": "^10.9.2", + "typescript": "~5.6.3" + } + }, + "node_modules/@aws-cdk/asset-awscli-v1": { + "version": "2.2.215", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.215.tgz", + "integrity": "sha512-D+Jzwpl+zlBGjJf7nuRcz6JFNwqDQ+IzwIq0VSC4LMRRvrkhGE/ZE+zab3EnjmVkipcQqtQe+PVKefgmxETbvA==", + "license": "Apache-2.0" + }, + "node_modules/@aws-cdk/asset-kubectl-v20": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.3.tgz", + "integrity": "sha512-cDG1w3ieM6eOT9mTefRuTypk95+oyD7P5X/wRltwmYxU7nZc3+076YEVS6vrjDKr3ADYbfn0lDKpfB1FBtO9CQ==", + "license": "Apache-2.0" + }, + "node_modules/@aws-cdk/asset-node-proxy-agent-v6": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.1.0.tgz", + "integrity": "sha512-7bY3J8GCVxLupn/kNmpPc5VJz8grx+4RKfnnJiO1LG+uxkZfANZG3RMHhE+qQxxwkyQ9/MfPtTpf748UhR425A==", + "license": "Apache-2.0" + }, + "node_modules/@aws-cdk/cloud-assembly-schema": { + "version": "38.0.1", + "resolved": "https://registry.npmjs.org/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-38.0.1.tgz", + "integrity": "sha512-KvPe+NMWAulfNVwY7jenFhzhuLhLqJ/OPy5jx7wUstbjnYnjRVLpUHPU3yCjXFE0J8cuJVdx95BJ4rOs66Pi9w==", + "bundleDependencies": [ + "jsonschema", + "semver" + ], + "license": "Apache-2.0", + "dependencies": { + "jsonschema": "^1.4.1", + "semver": "^7.6.3" + } + }, + "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/jsonschema": { + "version": "1.4.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/semver": { + "version": "7.6.3", + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/node": { + "version": "22.7.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.9.tgz", + "integrity": "sha512-jrTfRC7FM6nChvU7X2KqcrgquofrWLFDeYC1hKfwNWomVvrn7JIksqf344WN2X/y8xrgqBd2dJATZV4GbatBfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/aws-cdk": { + "version": "2.173.1", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.173.1.tgz", + "integrity": "sha512-1KWz6ZPPpBk3LyxE+iR4Gi1bbdY5N6Zj7kx/26jqvavBfZle93vT3M0jlTKI6v/bBtpYsVHTOmPFcq0fg1DfCw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "cdk": "bin/cdk" + }, + "engines": { + "node": ">= 14.15.0" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/aws-cdk-lib": { + "version": "2.173.2", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.173.2.tgz", + "integrity": "sha512-cL9+z8Pl3VZGoO7BwdsrFAOeud/vSl3at7OvmhihbNprMN15XuFUx/rViAU5OI1m92NbV4NBzYSLbSeCwYLNyw==", + "bundleDependencies": [ + "@balena/dockerignore", + "case", + "fs-extra", + "ignore", + "jsonschema", + "minimatch", + "punycode", + "semver", + "table", + "yaml", + "mime-types" + ], + "license": "Apache-2.0", + "dependencies": { + "@aws-cdk/asset-awscli-v1": "^2.2.208", + "@aws-cdk/asset-kubectl-v20": "^2.1.3", + "@aws-cdk/asset-node-proxy-agent-v6": "^2.1.0", + "@aws-cdk/cloud-assembly-schema": "^38.0.1", + "@balena/dockerignore": "^1.0.2", + "case": "1.6.3", + "fs-extra": "^11.2.0", + "ignore": "^5.3.2", + "jsonschema": "^1.4.1", + "mime-types": "^2.1.35", + "minimatch": "^3.1.2", + "punycode": "^2.3.1", + "semver": "^7.6.3", + "table": "^6.8.2", + "yaml": "1.10.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "constructs": "^10.0.0" + } + }, + "node_modules/aws-cdk-lib/node_modules/@balena/dockerignore": { + "version": "1.0.2", + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/aws-cdk-lib/node_modules/ajv": { + "version": "8.17.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/aws-cdk-lib/node_modules/ansi-regex": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/aws-cdk-lib/node_modules/ansi-styles": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/aws-cdk-lib/node_modules/astral-regex": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/aws-cdk-lib/node_modules/balanced-match": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/brace-expansion": { + "version": "1.1.11", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/aws-cdk-lib/node_modules/case": { + "version": "1.6.3", + "inBundle": true, + "license": "(MIT OR GPL-3.0-or-later)", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/aws-cdk-lib/node_modules/color-convert": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/aws-cdk-lib/node_modules/color-name": { + "version": "1.1.4", + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/concat-map": { + "version": "0.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/emoji-regex": { + "version": "8.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/fast-deep-equal": { + "version": "3.1.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/fast-uri": { + "version": "3.0.3", + "inBundle": true, + "license": "BSD-3-Clause" + }, + "node_modules/aws-cdk-lib/node_modules/fs-extra": { + "version": "11.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/aws-cdk-lib/node_modules/graceful-fs": { + "version": "4.2.11", + "inBundle": true, + "license": "ISC" + }, + "node_modules/aws-cdk-lib/node_modules/ignore": { + "version": "5.3.2", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/aws-cdk-lib/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/aws-cdk-lib/node_modules/json-schema-traverse": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/jsonfile": { + "version": "6.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/aws-cdk-lib/node_modules/jsonschema": { + "version": "1.4.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/aws-cdk-lib/node_modules/lodash.truncate": { + "version": "4.4.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/aws-cdk-lib/node_modules/mime-db": { + "version": "1.52.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/aws-cdk-lib/node_modules/mime-types": { + "version": "2.1.35", + "inBundle": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/aws-cdk-lib/node_modules/minimatch": { + "version": "3.1.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/aws-cdk-lib/node_modules/punycode": { + "version": "2.3.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/aws-cdk-lib/node_modules/require-from-string": { + "version": "2.0.2", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/aws-cdk-lib/node_modules/semver": { + "version": "7.6.3", + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aws-cdk-lib/node_modules/slice-ansi": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/aws-cdk-lib/node_modules/string-width": { + "version": "4.2.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/aws-cdk-lib/node_modules/strip-ansi": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/aws-cdk-lib/node_modules/table": { + "version": "6.8.2", + "inBundle": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/aws-cdk-lib/node_modules/universalify": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aws-cdk-lib/node_modules/yaml": { + "version": "1.10.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/constructs": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-10.4.2.tgz", + "integrity": "sha512-wsNxBlAott2qg8Zv87q3eYZYgheb9lchtBfjHzzLHtXbttwSrHPs1NNQbBrmbb1YZvYg2+Vh0Dor76w4mFxJkA==", + "license": "Apache-2.0" + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + } + } +} diff --git a/Examples/CDK/infra/package.json b/Examples/CDK/infra/package.json new file mode 100644 index 00000000..02150416 --- /dev/null +++ b/Examples/CDK/infra/package.json @@ -0,0 +1,23 @@ +{ + "name": "deploy", + "version": "0.1.0", + "bin": { + "deploy": "bin/deploy.js" + }, + "scripts": { + "build": "tsc", + "watch": "tsc -w", + "cdk": "cdk" + }, + "devDependencies": { + "@types/jest": "^29.5.14", + "@types/node": "22.7.9", + "aws-cdk": "2.173.1", + "ts-node": "^10.9.2", + "typescript": "~5.6.3" + }, + "dependencies": { + "aws-cdk-lib": "^2.173.1", + "constructs": "^10.4.2" + } +} diff --git a/Examples/CDK/infra/tsconfig.json b/Examples/CDK/infra/tsconfig.json new file mode 100644 index 00000000..aaa7dc51 --- /dev/null +++ b/Examples/CDK/infra/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "commonjs", + "lib": [ + "es2020", + "dom" + ], + "declaration": true, + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "noImplicitThis": true, + "alwaysStrict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": false, + "inlineSourceMap": true, + "inlineSources": true, + "experimentalDecorators": true, + "strictPropertyInitialization": false, + "typeRoots": [ + "./node_modules/@types" + ] + }, + "exclude": [ + "node_modules", + "cdk.out" + ] +} diff --git a/Examples/README.md b/Examples/README.md index 3c6e4a4b..eca88df8 100644 --- a/Examples/README.md +++ b/Examples/README.md @@ -12,12 +12,16 @@ This directory contains example code for Lambda functions. - Some examples are using [AWS SAM](https://aws.amazon.com/serverless/sam/). Install the [SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html) before deploying these examples. +- Some examples are using the [AWS CDK](https://aws.amazon.com/cdk/). Install the [CDK CLI](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) before deploying these examples. + ## Examples - **[API Gateway](APIGateway/README.md)**: an HTTPS REST API with [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) and a Lambda function as backend (requires [AWS SAM](https://aws.amazon.com/serverless/sam/)). - **[BackgroundTasks](BackgroundTasks/README.md)**: a Lambda function that continues to run background tasks after having sent the response (requires [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)). +- **[CDK](CDK/README.md)**: a simple example of an AWS Lambda function invoked through an Amazon API Gateway and deployed with the Cloud Development Kit (CDK). + - **[HelloJSON](HelloJSON/README.md)**: a Lambda function that accepts JSON as an input parameter and responds with a JSON output (requires [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)). - **[HelloWorld](HelloWorld/README.md)**: a simple Lambda function (requires [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)). @@ -52,7 +56,7 @@ To obtain these keys, you need an AWS account: 2. **Create IAM User**: In the console, go to IAM (Identity and Access Management) and create a new user. Ensure you set permissions that match what the user will need for your application (e.g., permissions to access specific AWS services, such as AWS Lambda). -3. **Generate Access Key and Secret Access Key**: In the IAM user settings, find the option to generate an "Access Key" and "Secret Access Key." Save these securely! You’ll need them to authenticate your requests. +3. **Generate Access Key and Secret Access Key**: In the IAM user credentials section, find the option to generate an "Access Key" and "Secret Access Key." Save these securely! You’ll need them to authenticate your requests. 4. **(Optional) Generate Temporary Security Credentials**: If you’re using temporary credentials (which are more secure for short-term access), use AWS Security Token Service (STS). You can call the `GetSessionToken` or `AssumeRole` API to generate temporary credentials, including a session token. From e5404c95cbd28118b9a8d7fbeeb3eba6695254c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Sun, 22 Dec 2024 07:36:32 +0100 Subject: [PATCH 083/177] [examples] Fix path settings in the examples' Package.swift (#439) All the `Package.swift` files from the examples use `path: "."` instead of `path: "Sources"` which triggers error messages when users add a `Tests` directory. --- Examples/APIGateway/Package.swift | 2 +- Examples/BackgroundTasks/Package.swift | 2 +- Examples/CDK/Package.swift | 2 +- Examples/HelloWorld/Package.swift | 2 +- Examples/Streaming/Package.swift | 2 +- .../Documentation.docc/Resources/code/03-02-05-package.swift | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Examples/APIGateway/Package.swift b/Examples/APIGateway/Package.swift index ebaac99a..13ef31f5 100644 --- a/Examples/APIGateway/Package.swift +++ b/Examples/APIGateway/Package.swift @@ -29,7 +29,7 @@ let package = Package( .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), .product(name: "AWSLambdaEvents", package: "swift-aws-lambda-events"), ], - path: "." + path: "Sources" ) ] ) diff --git a/Examples/BackgroundTasks/Package.swift b/Examples/BackgroundTasks/Package.swift index 84ca71ad..5e703b0b 100644 --- a/Examples/BackgroundTasks/Package.swift +++ b/Examples/BackgroundTasks/Package.swift @@ -27,7 +27,7 @@ let package = Package( dependencies: [ .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") ], - path: "." + path: "Sources" ) ] ) diff --git a/Examples/CDK/Package.swift b/Examples/CDK/Package.swift index ebaac99a..13ef31f5 100644 --- a/Examples/CDK/Package.swift +++ b/Examples/CDK/Package.swift @@ -29,7 +29,7 @@ let package = Package( .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), .product(name: "AWSLambdaEvents", package: "swift-aws-lambda-events"), ], - path: "." + path: "Sources" ) ] ) diff --git a/Examples/HelloWorld/Package.swift b/Examples/HelloWorld/Package.swift index adb4b1f9..5f2421be 100644 --- a/Examples/HelloWorld/Package.swift +++ b/Examples/HelloWorld/Package.swift @@ -27,7 +27,7 @@ let package = Package( dependencies: [ .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") ], - path: "." + path: "Sources" ) ] ) diff --git a/Examples/Streaming/Package.swift b/Examples/Streaming/Package.swift index 85e1d093..b368d22b 100644 --- a/Examples/Streaming/Package.swift +++ b/Examples/Streaming/Package.swift @@ -27,7 +27,7 @@ let package = Package( dependencies: [ .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") ], - path: "." + path: "Sources" ) ] ) diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-05-package.swift b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-05-package.swift index 68ef3130..6e484fd6 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-05-package.swift +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-05-package.swift @@ -20,7 +20,7 @@ let package = Package( dependencies: [ .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") ], - path: "." + path: "Sources" ) ] ) From 5ec9a9076632033e4384467a967c41f59949d8e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Sun, 22 Dec 2024 11:16:16 +0100 Subject: [PATCH 084/177] [doc] add 'path: Source' to the quick setup guide (#440) Fix the `Package.Swift` in the quick setup doc file This is a follow up and a miss from https://github.com/swift-server/swift-aws-lambda-runtime/pull/439 --- Sources/AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md b/Sources/AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md index f5f4a0fc..18ecb565 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md @@ -45,7 +45,7 @@ let package = Package( dependencies: [ .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), ], - path: "." + path: "Sources" ), ] ) From b4d17fdf8d00a21fb816115371e666d2e9badec7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Sun, 22 Dec 2024 14:39:52 +0100 Subject: [PATCH 085/177] [CI] add CI scripts separate from the workflows (#442) _[One line description of your change]_ ### Motivation: _[Explain here the context, and why you're making that change. What is the problem you're trying to solve.]_ ### Modifications: _[Describe the modifications you've done.]_ ### Result: _[After your change, what will change.]_ --- .../workflows/scripts/check-archive-plugin.sh | 37 +++++++++++++ .../scripts/check-link-foundation.sh | 52 +++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100755 .github/workflows/scripts/check-archive-plugin.sh create mode 100755 .github/workflows/scripts/check-link-foundation.sh diff --git a/.github/workflows/scripts/check-archive-plugin.sh b/.github/workflows/scripts/check-archive-plugin.sh new file mode 100755 index 00000000..3a15c138 --- /dev/null +++ b/.github/workflows/scripts/check-archive-plugin.sh @@ -0,0 +1,37 @@ +#!/bin/bash +##===----------------------------------------------------------------------===## +## +## This source file is part of the SwiftAWSLambdaRuntime open source project +## +## Copyright (c) 2017-2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +## Licensed under Apache License v2.0 +## +## See LICENSE.txt for license information +## See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +## +## SPDX-License-Identifier: Apache-2.0 +## +##===----------------------------------------------------------------------===## + +EXAMPLE=HelloWorld +OUTPUT_DIR=.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager +OUTPUT_FILE=${OUTPUT_DIR}/MyLambda/bootstrap +ZIP_FILE=${OUTPUT_DIR}/MyLambda/MyLambda.zip + +pushd Examples/${EXAMPLE} || exit 1 + +# package the example (docker and swift toolchain are installed on the GH runner) +LAMBDA_USE_LOCAL_DEPS=../.. swift package archive --allow-network-connections docker || exit 1 + +# did the plugin generated a Linux binary? +[ -f "${OUTPUT_FILE}" ] +file "${OUTPUT_FILE}" | grep --silent ELF + +# did the plugin created a ZIP file? +[ -f "${ZIP_FILE}" ] + +# does the ZIP file contain the bootstrap? +unzip -l "${ZIP_FILE}" | grep --silent bootstrap + +echo "✅ The archive plugin is OK" +popd || exit 1 diff --git a/.github/workflows/scripts/check-link-foundation.sh b/.github/workflows/scripts/check-link-foundation.sh new file mode 100755 index 00000000..70324a54 --- /dev/null +++ b/.github/workflows/scripts/check-link-foundation.sh @@ -0,0 +1,52 @@ +#!/bin/bash +##===----------------------------------------------------------------------===## +## +## This source file is part of the SwiftAWSLambdaRuntime open source project +## +## Copyright (c) 2017-2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +## Licensed under Apache License v2.0 +## +## See LICENSE.txt for license information +## See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +## +## SPDX-License-Identifier: Apache-2.0 +## +##===----------------------------------------------------------------------===## + +log() { printf -- "** %s\n" "$*" >&2; } +error() { printf -- "** ERROR: %s\n" "$*" >&2; } +fatal() { error "$@"; exit 1; } + +EXAMPLE=APIGateway +OUTPUT_DIR=.build/release +OUTPUT_FILE=${OUTPUT_DIR}/APIGatewayLambda +LIBS_TO_CHECK="libFoundation.so libFoundationInternationalization.so lib_FoundationICU.so" + +pushd Examples/${EXAMPLE} || fatal "Failed to change directory to Examples/${EXAMPLE}." + +# recompile the example without the --static-swift-stdlib flag +LAMBDA_USE_LOCAL_DEPS=../.. swift build -c release -Xlinker -s || fatal "Failed to build the example." + +# check if the binary exists +if [ ! -f "${OUTPUT_FILE}" ]; then + error "❌ ${OUTPUT_FILE} does not exist." +fi + +# Checking for Foundation or ICU dependencies +echo "Checking for Foundation or ICU dependencies in ${OUTPUT_DIR}/${OUTPUT_FILE}." +LIBRARIES=$(ldd ${OUTPUT_FILE} | awk '{print $1}') +for LIB in ${LIBS_TO_CHECK}; do + echo -n "Checking for ${LIB}... " + + # check if the binary has a dependency on Foundation or ICU + echo "${LIBRARIES}" | grep "${LIB}" # return 1 if not found + + # 1 is success (grep failed to find the lib), 0 is failure (grep successly found the lib) + SUCCESS=$? + [ "$SUCCESS" -eq 0 ] && log "❌ ${LIB} found." && break || log "✅ ${LIB} not found." +done + +popd || fatal "Failed to change directory back to the root directory." + +# exit code is the opposite of the grep exit code +[ "$SUCCESS" -eq 0 ] && error "❌ At least one foundation lib was found, reporting the error." || log "✅ No foundation lib found, congrats!" && exit 0 \ No newline at end of file From 04b01da9fe0cac383e3ed62b7101c841868bb900 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Sun, 22 Dec 2024 15:17:44 +0100 Subject: [PATCH 086/177] move integration test to .github (#443) _[One line description of your change]_ ### Motivation: _[Explain here the context, and why you're making that change. What is the problem you're trying to solve.]_ ### Modifications: _[Describe the modifications you've done.]_ ### Result: _[After your change, what will change.]_ --- {scripts => .github/workflows/scripts}/integration_tests.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {scripts => .github/workflows/scripts}/integration_tests.sh (100%) diff --git a/scripts/integration_tests.sh b/.github/workflows/scripts/integration_tests.sh similarity index 100% rename from scripts/integration_tests.sh rename to .github/workflows/scripts/integration_tests.sh From e80fcf766ec4eb26445ea56b9726e37a71d055d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Tue, 24 Dec 2024 08:40:46 +0100 Subject: [PATCH 087/177] [examples] Update APIGateway example with the new APIGatewayResponse initializer (#437) After the merge of https://github.com/swift-server/swift-aws-lambda-events/pull/86 I updated the `APIGatewayV2Response` example to use the new initializer --- Examples/APIGateway/Sources/main.swift | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/Examples/APIGateway/Sources/main.swift b/Examples/APIGateway/Sources/main.swift index 2d5707d6..f7662d1c 100644 --- a/Examples/APIGateway/Sources/main.swift +++ b/Examples/APIGateway/Sources/main.swift @@ -15,13 +15,6 @@ import AWSLambdaEvents import AWSLambdaRuntime -#if canImport(FoundationEssentials) -import FoundationEssentials -#else -import Foundation -#endif - -let encoder = JSONEncoder() let runtime = LambdaRuntime { (event: APIGatewayV2Request, context: LambdaContext) -> APIGatewayV2Response in @@ -31,10 +24,7 @@ let runtime = LambdaRuntime { header["content-type"] = "application/json" // echo the request in the response - let data = try encoder.encode(event) - let response = String(decoding: data, as: Unicode.UTF8.self) - - return APIGatewayV2Response(statusCode: .ok, headers: header, body: response) + return try APIGatewayV2Response(statusCode: .ok, headers: header, encodableBody: event) } try await runtime.run() From 8c1c1b6fc3cc8edda15d4dcb3119abea1fa42cb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Tue, 24 Dec 2024 08:43:45 +0100 Subject: [PATCH 088/177] revert commit 04b01da9fe0cac383e3ed62b7101c841868bb900 --- .../scripts/check-link-foundation.sh | 52 ------------------- 1 file changed, 52 deletions(-) delete mode 100755 .github/workflows/scripts/check-link-foundation.sh diff --git a/.github/workflows/scripts/check-link-foundation.sh b/.github/workflows/scripts/check-link-foundation.sh deleted file mode 100755 index 70324a54..00000000 --- a/.github/workflows/scripts/check-link-foundation.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash -##===----------------------------------------------------------------------===## -## -## This source file is part of the SwiftAWSLambdaRuntime open source project -## -## Copyright (c) 2017-2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors -## Licensed under Apache License v2.0 -## -## See LICENSE.txt for license information -## See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors -## -## SPDX-License-Identifier: Apache-2.0 -## -##===----------------------------------------------------------------------===## - -log() { printf -- "** %s\n" "$*" >&2; } -error() { printf -- "** ERROR: %s\n" "$*" >&2; } -fatal() { error "$@"; exit 1; } - -EXAMPLE=APIGateway -OUTPUT_DIR=.build/release -OUTPUT_FILE=${OUTPUT_DIR}/APIGatewayLambda -LIBS_TO_CHECK="libFoundation.so libFoundationInternationalization.so lib_FoundationICU.so" - -pushd Examples/${EXAMPLE} || fatal "Failed to change directory to Examples/${EXAMPLE}." - -# recompile the example without the --static-swift-stdlib flag -LAMBDA_USE_LOCAL_DEPS=../.. swift build -c release -Xlinker -s || fatal "Failed to build the example." - -# check if the binary exists -if [ ! -f "${OUTPUT_FILE}" ]; then - error "❌ ${OUTPUT_FILE} does not exist." -fi - -# Checking for Foundation or ICU dependencies -echo "Checking for Foundation or ICU dependencies in ${OUTPUT_DIR}/${OUTPUT_FILE}." -LIBRARIES=$(ldd ${OUTPUT_FILE} | awk '{print $1}') -for LIB in ${LIBS_TO_CHECK}; do - echo -n "Checking for ${LIB}... " - - # check if the binary has a dependency on Foundation or ICU - echo "${LIBRARIES}" | grep "${LIB}" # return 1 if not found - - # 1 is success (grep failed to find the lib), 0 is failure (grep successly found the lib) - SUCCESS=$? - [ "$SUCCESS" -eq 0 ] && log "❌ ${LIB} found." && break || log "✅ ${LIB} not found." -done - -popd || fatal "Failed to change directory back to the root directory." - -# exit code is the opposite of the grep exit code -[ "$SUCCESS" -eq 0 ] && error "❌ At least one foundation lib was found, reporting the error." || log "✅ No foundation lib found, congrats!" && exit 0 \ No newline at end of file From 31a7edaf87f33e736b80f2d0b677bc6a78da0648 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Wed, 25 Dec 2024 07:42:54 +0100 Subject: [PATCH 089/177] =?UTF-8?q?[CI]=20add=20test=20to=20check=20libFou?= =?UTF-8?q?ndation.so=20&=20co=20are=20not=20linked=20to=20the=20bi?= =?UTF-8?q?=E2=80=A6=20(#441)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This adds a test in the `integration_test.yml` workflow to verify that `libFoundation.so`, `libFoundationInternationalization.so`, and `lib_FoundationICU.so` and not linked the the function binary. This is a follow up from the work make by @t089 to ensure that we don't accidentally link Foundation again in the future. Remove Foundation : https://github.com/swift-server/swift-aws-lambda-runtime/pull/436 Add test in CI to ensure we don't link to foundation : https://github.com/swift-server/swift-aws-lambda-runtime/issues/402 --- .github/workflows/integration_tests.yml | 45 +++++++------- .../scripts/check-link-foundation.sh | 60 +++++++++++++++++++ 2 files changed, 81 insertions(+), 24 deletions(-) create mode 100755 .github/workflows/scripts/check-link-foundation.sh diff --git a/.github/workflows/integration_tests.yml b/.github/workflows/integration_tests.yml index baf78508..468fc295 100644 --- a/.github/workflows/integration_tests.yml +++ b/.github/workflows/integration_tests.yml @@ -23,6 +23,10 @@ on: type: boolean description: "Boolean to enable the test of the archive plugin. Defaults to true." default: true + check_foundation_enabled: + type: boolean + description: "Boolean to enable the check for Foundation dependency. Defaults to true." + default: true matrix_linux_command: type: string description: "The command of the current Swift version linux matrix job to execute." @@ -88,15 +92,12 @@ jobs: COMMAND: ${{ inputs.matrix_linux_command }} EXAMPLE: ${{ matrix.examples }} run: | - ./scripts/integration_tests.sh - echo "✅ The examples compile correctly" + .github/workflows/scripts/integration_tests.sh test-archive-plugin: name: Test archive plugin if: ${{ inputs.archive_plugin_enabled }} runs-on: ubuntu-latest - strategy: - fail-fast: false steps: - name: Checkout repository uses: actions/checkout@v4 @@ -106,25 +107,21 @@ jobs: # https://github.com/actions/checkout/issues/766 run: git config --global --add safe.directory ${GITHUB_WORKSPACE} - name: Test the archive plugin - env: - EXAMPLE: HelloWorld - OUTPUT_FILE: .build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/MyLambda/bootstrap - ZIP_FILE: .build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/MyLambda/MyLambda.zip run: | - pushd Examples/${EXAMPLE} + .github/workflows/scripts/check-archive-plugin.sh - # package the example (docker and swift toolchain are installed on the GH runner) - LAMBDA_USE_LOCAL_DEPS=../.. swift package archive --allow-network-connections docker - - # did the plugin generated a Linux binary? - [ -f ${OUTPUT_FILE} ] - file ${OUTPUT_FILE} | grep --silent ELF - - # did the plugin created a ZIP file? - [ -f ${ZIP_FILE} ] - - # does the ZIP file contain the bootstrap? - unzip -l ${ZIP_FILE} | grep --silent bootstrap - - echo "✅ The archive plugin is OK" - popd + check-foundation: + name: No dependencies on Foundation + if: ${{ inputs.check_foundation_enabled }} + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + persist-credentials: false + - name: Mark the workspace as safe + # https://github.com/actions/checkout/issues/766 + run: git config --global --add safe.directory ${GITHUB_WORKSPACE} + - name: Check for Foundation or ICU dependency + run: | + .github/workflows/scripts/check-link-foundation.sh diff --git a/.github/workflows/scripts/check-link-foundation.sh b/.github/workflows/scripts/check-link-foundation.sh new file mode 100755 index 00000000..be84116c --- /dev/null +++ b/.github/workflows/scripts/check-link-foundation.sh @@ -0,0 +1,60 @@ +#!/bin/bash +##===----------------------------------------------------------------------===## +## +## This source file is part of the SwiftAWSLambdaRuntime open source project +## +## Copyright (c) 2017-2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +## Licensed under Apache License v2.0 +## +## See LICENSE.txt for license information +## See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +## +## SPDX-License-Identifier: Apache-2.0 +## +##===----------------------------------------------------------------------===## + +log() { printf -- "** %s\n" "$*" >&2; } +error() { printf -- "** ERROR: %s\n" "$*" >&2; } +fatal() { error "$@"; exit 1; } + +EXAMPLE=APIGateway +OUTPUT_DIR=.build/release +OUTPUT_FILE=${OUTPUT_DIR}/APIGatewayLambda +LIBS_TO_CHECK="libFoundation.so libFoundationInternationalization.so lib_FoundationICU.so" + +pushd Examples/${EXAMPLE} || fatal "Failed to change directory to Examples/${EXAMPLE}." + +# recompile the example without the --static-swift-stdlib flag +LAMBDA_USE_LOCAL_DEPS=../.. swift build -c release -Xlinker -s || fatal "Failed to build the example." + +# check if the binary exists +if [ ! -f "${OUTPUT_FILE}" ]; then + error "❌ ${OUTPUT_FILE} does not exist." +fi + +# Checking for Foundation or ICU dependencies +echo "Checking for Foundation or ICU dependencies in ${OUTPUT_DIR}/${OUTPUT_FILE}." +LIBRARIES=$(ldd ${OUTPUT_FILE} | awk '{print $1}') +for LIB in ${LIBS_TO_CHECK}; do + echo -n "Checking for ${LIB}... " + + # check if the binary has a dependency on Foundation or ICU + echo "${LIBRARIES}" | grep "${LIB}" # return 1 if not found + + # 1 is success (grep failed to find the lib), 0 is failure (grep successly found the lib) + SUCCESS=$? + if [ "$SUCCESS" -eq 0 ]; then + log "❌ ${LIB} found." && break + else + log "✅ ${LIB} not found." + fi +done + +popd || fatal "Failed to change directory back to the root directory." + +# exit code is the opposite of the grep exit code +if [ "$SUCCESS" -eq 0 ]; then + fatal "❌ At least one foundation lib was found, reporting the error." +else + log "✅ No foundation lib found, congrats!" && exit 0 +fi \ No newline at end of file From cef85b9fe8c77971359aabee8156eefcd1e4d659 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Wed, 25 Dec 2024 07:43:20 +0100 Subject: [PATCH 090/177] [examples] add an example project to show test strategies (#438) This new example project show four testing strategies for Swift Lambda function - Unit testing the business logic (not specific to Swift Lambda) - Integration testing the handler method - Local invocation with the Swift Lambda Runtime - Local invocation with SAM **[IMPORTANT]** To allow testing the handler, I had to change visibility of a method in the Runtime project. This method is clearly marked for testing only, so it should not be a problem. Happy to read feedback and discuss however. --- Examples/README.md | 2 + Examples/Testing/Package.swift | 64 ++++++++ Examples/Testing/README.md | 170 +++++++++++++++++++++ Examples/Testing/Sources/Business.swift | 33 ++++ Examples/Testing/Sources/main.swift | 48 ++++++ Examples/Testing/Tests/BusinessTests.swift | 40 +++++ Examples/Testing/Tests/HandlerTests.swift | 62 ++++++++ Examples/Testing/Tests/event.json | 35 +++++ Examples/Testing/template.yaml | 31 ++++ 9 files changed, 485 insertions(+) create mode 100644 Examples/Testing/Package.swift create mode 100644 Examples/Testing/README.md create mode 100644 Examples/Testing/Sources/Business.swift create mode 100644 Examples/Testing/Sources/main.swift create mode 100644 Examples/Testing/Tests/BusinessTests.swift create mode 100644 Examples/Testing/Tests/HandlerTests.swift create mode 100644 Examples/Testing/Tests/event.json create mode 100644 Examples/Testing/template.yaml diff --git a/Examples/README.md b/Examples/README.md index eca88df8..0057e380 100644 --- a/Examples/README.md +++ b/Examples/README.md @@ -32,6 +32,8 @@ This directory contains example code for Lambda functions. - **[Streaming]**: create a Lambda function exposed as an URL. The Lambda function streams its response over time. (requires [AWS SAM](https://aws.amazon.com/serverless/sam/)). +- **[Testing](Testing/README.md)**: a test suite for Lambda functions. + ## AWS Credentials and Signature This section is a short tutorial on the AWS Signature protocol and the AWS credentials. diff --git a/Examples/Testing/Package.swift b/Examples/Testing/Package.swift new file mode 100644 index 00000000..79aab087 --- /dev/null +++ b/Examples/Testing/Package.swift @@ -0,0 +1,64 @@ +// swift-tools-version:6.0 + +import PackageDescription + +// needed for CI to test the local version of the library +import struct Foundation.URL + +let package = Package( + name: "swift-aws-lambda-runtime-example", + platforms: [.macOS(.v15)], + products: [ + .executable(name: "APIGatewayLambda", targets: ["APIGatewayLambda"]) + ], + dependencies: [ + // during CI, the dependency on local version of swift-aws-lambda-runtime is added dynamically below + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main"), + .package(url: "https://github.com/swift-server/swift-aws-lambda-events.git", branch: "main"), + ], + targets: [ + .executableTarget( + name: "APIGatewayLambda", + dependencies: [ + .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), + .product(name: "AWSLambdaEvents", package: "swift-aws-lambda-events"), + ], + path: "Sources" + ), + .testTarget( + name: "LambdaFunctionTests", + dependencies: ["APIGatewayLambda"], + path: "Tests", + resources: [ + .process("event.json") + ] + ), + ] +) + +if let localDepsPath = Context.environment["LAMBDA_USE_LOCAL_DEPS"], + localDepsPath != "", + let v = try? URL(fileURLWithPath: localDepsPath).resourceValues(forKeys: [.isDirectoryKey]), + v.isDirectory == true +{ + // when we use the local runtime as deps, let's remove the dependency added above + let indexToRemove = package.dependencies.firstIndex { dependency in + if case .sourceControl( + name: _, + location: "https://github.com/swift-server/swift-aws-lambda-runtime.git", + requirement: _ + ) = dependency.kind { + return true + } + return false + } + if let indexToRemove { + package.dependencies.remove(at: indexToRemove) + } + + // then we add the dependency on LAMBDA_USE_LOCAL_DEPS' path (typically ../..) + print("[INFO] Compiling against swift-aws-lambda-runtime located at \(localDepsPath)") + package.dependencies += [ + .package(name: "swift-aws-lambda-runtime", path: localDepsPath) + ] +} diff --git a/Examples/Testing/README.md b/Examples/Testing/README.md new file mode 100644 index 00000000..1b4ce984 --- /dev/null +++ b/Examples/Testing/README.md @@ -0,0 +1,170 @@ +# Swift Testing Example + +This is a simple example to show different testing strategies for your Swift Lambda functions. +For this example, we developed a simple Lambda function that returns the body of the API Gateway payload in lowercase, except for the first letter, which is in uppercase. + +In this document, we describe four different testing strategies: + * [Unit Testing your business logic](#unit-testing-your-business-logic) + * [Integration testing the handler function](#integration-testing-the-handler-function) + * [Local invocation using the Swift AWS Lambda Runtime](#local-invocation-using-the-swift-aws-lambda-runtime) + * [Local invocation using the AWS SAM CLI](#local-invocation-using-the-aws-sam-cli) + +> [!IMPORTANT] +> In this example, the API Gateway sends a payload to the Lambda function as a JSON string. Your business payload is in the `body` section of the API Gateway payload. It is base64-encoded. You can find an example of the API Gateway payload in the `event.json` file. The API Gateway event format is documented in [Create AWS Lambda proxy integrations for HTTP APIs in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html). + +To include a sample event in your test targets, you must add the `event.json` file from the `Tests` directory to the binary bundle. To do so, add a `resources` section in your `Package.swift` file: + +```swift + .testTarget( + name: "LambdaFunctionTests", + dependencies: ["APIGatewayLambda"], + path: "Tests", + resources: [ + .process("event.json") + ] + ) +``` + +## Unit Testing your business logic + +You can test the business logic of your Lambda function by writing unit tests for your business code used in the handler function, just like usual. + +1. Create your Swift Test code in the `Tests` directory. + +```swift +let valuesToTest: [(String, String)] = [ + ("hello world", "Hello world"), // happy path + ("", ""), // Empty string + ("a", "A"), // Single character +] + +@Suite("Business Tests") +class BusinessTests { + + @Test("Uppercased First", arguments: valuesToTest) + func uppercasedFirst(_ arg: (String,String)) { + let input = arg.0 + let expectedOutput = arg.1 + #expect(input.uppercasedFirst() == expectedOutput) + } +}``` + +2. Add a test target to your `Package.swift` file. +```swift + .testTarget( + name: "BusinessTests", + dependencies: ["APIGatewayLambda"], + path: "Tests" + ) +``` + +3. run `swift test` to run the tests. + +## Integration Testing the handler function + +You can test the handler function by creating an input event, a mock Lambda context, and calling the handler function from your test. +Your Lambda handler function must be declared separatly from the `LambdaRuntime`. For example: + +```swift +public struct MyHandler: Sendable { + + public func handler(event: APIGatewayV2Request, context: LambdaContext) async throws -> APIGatewayV2Response { + context.logger.debug("HTTP API Message received") + context.logger.trace("Event: \(event)") + + var header = HTTPHeaders() + header["content-type"] = "application/json" + + if let payload = event.body { + // call our business code to process the payload and return a response + return APIGatewayV2Response(statusCode: .ok, headers: header, body: payload.uppercasedFirst()) + } else { + return APIGatewayV2Response(statusCode: .badRequest) + } + } +} + +let runtime = LambdaRuntime(body: MyHandler().handler) +try await runtime.run() +``` + +Then, the test looks like this: + +```swift +@Suite("Handler Tests") +public struct HandlerTest { + + @Test("Invoke handler") + public func invokeHandler() async throws { + + // read event.json file + let testBundle = Bundle.module + guard let eventURL = testBundle.url(forResource: "event", withExtension: "json") else { + Issue.record("event.json not found in test bundle") + return + } + let eventData = try Data(contentsOf: eventURL) + + // decode the event + let apiGatewayRequest = try JSONDecoder().decode(APIGatewayV2Request.self, from: eventData) + + // create a mock LambdaContext + let lambdaContext = LambdaContext.__forTestsOnly( + requestID: UUID().uuidString, + traceID: UUID().uuidString, + invokedFunctionARN: "arn:", + timeout: .milliseconds(6000), + logger: Logger(label: "fakeContext") + ) + + // call the handler with the event and context + let response = try await MyHandler().handler(event: apiGatewayRequest, context: lambdaContext) + + // assert the response + #expect(response.statusCode == .ok) + #expect(response.body == "Hello world of swift lambda!") + } +} +``` + +## Local invocation using the Swift AWS Lambda Runtime + +You can test your Lambda function locally by invoking it with the Swift AWS Lambda Runtime. + +You must pass a payload to the Lambda function. You can use the `Tests/event.json` file for this purpose. The return value is a `APIGatewayV2Response` object in this example. + +Just type `swift run` to run the Lambda function locally. + +```sh +LOG_LEVEL=trace swift run + +# from another terminal +# the `-X POST` flag is implied when using `--data`. It is here for clarity only. +curl -X POST "http://127.0.0.1:7000/invoke" --data @Tests/event.json +``` + +This returns the following response: + +```text +{"statusCode":200,"headers":{"content-type":"application\/json"},"body":"Hello world of swift lambda!"} +``` + +## Local invocation using the AWS SAM CLI + +The AWS SAM CLI provides you with a local testing environment for your Lambda functions. It deploys and invoke your function locally in a Docker container designed to mimic the AWS Lambda environment. + +You must pass a payload to the Lambda function. You can use the `event.json` file for this purpose. The return value is a `APIGatewayV2Response` object in this example. + +```sh +sam local invoke -e Tests/event.json + +START RequestId: 3270171f-46d3-45f9-9bb6-3c2e5e9dc625 Version: $LATEST +2024-12-21T16:49:31+0000 debug LambdaRuntime : [AWSLambdaRuntimeCore] LambdaRuntime initialized +2024-12-21T16:49:31+0000 trace LambdaRuntime : lambda_ip=127.0.0.1 lambda_port=9001 [AWSLambdaRuntimeCore] Connection to control plane created +2024-12-21T16:49:31+0000 debug LambdaRuntime : [APIGatewayLambda] HTTP API Message received +2024-12-21T16:49:31+0000 trace LambdaRuntime : [APIGatewayLambda] Event: APIGatewayV2Request(version: "2.0", routeKey: "$default", rawPath: "/", rawQueryString: "", cookies: [], headers: ["x-forwarded-proto": "https", "host": "a5q74es3k2.execute-api.us-east-1.amazonaws.com", "content-length": "0", "x-forwarded-for": "81.0.0.43", "accept": "*/*", "x-amzn-trace-id": "Root=1-66fb03de-07533930192eaf5f540db0cb", "x-forwarded-port": "443", "user-agent": "curl/8.7.1"], queryStringParameters: [:], pathParameters: [:], context: AWSLambdaEvents.APIGatewayV2Request.Context(accountId: "012345678901", apiId: "a5q74es3k2", domainName: "a5q74es3k2.execute-api.us-east-1.amazonaws.com", domainPrefix: "a5q74es3k2", stage: "$default", requestId: "e72KxgsRoAMEMSA=", http: AWSLambdaEvents.APIGatewayV2Request.Context.HTTP(method: GET, path: "/", protocol: "HTTP/1.1", sourceIp: "81.0.0.43", userAgent: "curl/8.7.1"), authorizer: nil, authentication: nil, time: "30/Sep/2024:20:02:38 +0000", timeEpoch: 1727726558220), stageVariables: [:], body: Optional("aGVsbG8gd29ybGQgb2YgU1dJRlQgTEFNQkRBIQ=="), isBase64Encoded: false) +END RequestId: 5b71587a-39da-445e-855d-27a700e57efd +REPORT RequestId: 5b71587a-39da-445e-855d-27a700e57efd Init Duration: 0.04 ms Duration: 21.57 ms Billed Duration: 22 ms Memory Size: 512 MB Max Memory Used: 512 MB + +{"body": "Hello world of swift lambda!", "statusCode": 200, "headers": {"content-type": "application/json"}} +``` \ No newline at end of file diff --git a/Examples/Testing/Sources/Business.swift b/Examples/Testing/Sources/Business.swift new file mode 100644 index 00000000..af95b8e5 --- /dev/null +++ b/Examples/Testing/Sources/Business.swift @@ -0,0 +1,33 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +extension String { + /// Returns a new string with the first character capitalized and the remaining characters in lowercase. + /// + /// This method capitalizes the first character of the string and converts the remaining characters to lowercase. + /// It is useful for formatting strings where only the first character should be uppercase. + /// + /// - Returns: A new string with the first character capitalized and the remaining characters in lowercase. + /// + /// - Example: + /// ``` + /// let example = "hello world" + /// print(example.uppercasedFirst()) // Prints "Hello world" + /// ``` + func uppercasedFirst() -> String { + let firstCharacter = prefix(1).capitalized + let remainingCharacters = dropFirst().lowercased() + return firstCharacter + remainingCharacters + } +} diff --git a/Examples/Testing/Sources/main.swift b/Examples/Testing/Sources/main.swift new file mode 100644 index 00000000..af76e02c --- /dev/null +++ b/Examples/Testing/Sources/main.swift @@ -0,0 +1,48 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import AWSLambdaEvents +import AWSLambdaRuntime + +#if canImport(FoundationEssentials) +import FoundationEssentials +#else +import Foundation +#endif + +public struct MyHandler: Sendable { + + public func handler(event: APIGatewayV2Request, context: LambdaContext) async throws -> APIGatewayV2Response { + context.logger.debug("HTTP API Message received") + context.logger.trace("Event: \(event)") + + var header = HTTPHeaders() + header["content-type"] = "application/json" + + // API Gateway sends text or URL encoded data as a Base64 encoded string + if let base64EncodedString = event.body, + let decodedData = Data(base64Encoded: base64EncodedString), + let decodedString = String(data: decodedData, encoding: .utf8) + { + + // call our business code to process the payload and return a response + return APIGatewayV2Response(statusCode: .ok, headers: header, body: decodedString.uppercasedFirst()) + } else { + return APIGatewayV2Response(statusCode: .badRequest) + } + } +} + +let runtime = LambdaRuntime(body: MyHandler().handler) +try await runtime.run() diff --git a/Examples/Testing/Tests/BusinessTests.swift b/Examples/Testing/Tests/BusinessTests.swift new file mode 100644 index 00000000..85f821e1 --- /dev/null +++ b/Examples/Testing/Tests/BusinessTests.swift @@ -0,0 +1,40 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import Testing + +@testable import APIGatewayLambda // to access the business code + +let valuesToTest: [(String, String)] = [ + ("hello world", "Hello world"), // happy path + ("", ""), // Empty string + ("a", "A"), // Single character + ("A", "A"), // Single uppercase character + ("HELLO WORLD", "Hello world"), // All uppercase + ("hello world", "Hello world"), // All lowercase + ("hElLo WoRlD", "Hello world"), // Mixed case + ("123abc", "123abc"), // Numeric string + ("!@#abc", "!@#abc"), // Special characters +] + +@Suite("Business Tests") +class BusinessTests { + + @Test("Uppercased First", arguments: valuesToTest) + func uppercasedFirst(_ arg: (String, String)) { + let input = arg.0 + let expectedOutput = arg.1 + #expect(input.uppercasedFirst() == expectedOutput) + } +} diff --git a/Examples/Testing/Tests/HandlerTests.swift b/Examples/Testing/Tests/HandlerTests.swift new file mode 100644 index 00000000..7fa245f9 --- /dev/null +++ b/Examples/Testing/Tests/HandlerTests.swift @@ -0,0 +1,62 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import AWSLambdaEvents +import AWSLambdaRuntime +import Logging +import Testing + +@testable import APIGatewayLambda // to access the business code +@testable import AWSLambdaRuntimeCore // to access the LambdaContext + +#if canImport(FoundationEssentials) +import FoundationEssentials +#else +import Foundation +#endif + +@Suite("Handler Tests") +public struct HandlerTest { + + @Test("Invoke handler") + public func invokeHandler() async throws { + + // read event.json file + let testBundle = Bundle.module + guard let eventURL = testBundle.url(forResource: "event", withExtension: "json") else { + Issue.record("event.json not found in test bundle") + return + } + let eventData = try Data(contentsOf: eventURL) + + // decode the event + let apiGatewayRequest = try JSONDecoder().decode(APIGatewayV2Request.self, from: eventData) + + // create a mock LambdaContext + let lambdaContext = LambdaContext.__forTestsOnly( + requestID: UUID().uuidString, + traceID: UUID().uuidString, + invokedFunctionARN: "arn:", + timeout: .milliseconds(6000), + logger: Logger(label: "fakeContext") + ) + + // call the handler with the event and context + let response = try await MyHandler().handler(event: apiGatewayRequest, context: lambdaContext) + + // assert the response + #expect(response.statusCode == .ok) + #expect(response.body == "Hello world of swift lambda!") + } +} diff --git a/Examples/Testing/Tests/event.json b/Examples/Testing/Tests/event.json new file mode 100644 index 00000000..213f8bee --- /dev/null +++ b/Examples/Testing/Tests/event.json @@ -0,0 +1,35 @@ +{ + "version": "2.0", + "rawPath": "/", + "body": "aGVsbG8gd29ybGQgb2YgU1dJRlQgTEFNQkRBIQ==", + "requestContext": { + "domainPrefix": "a5q74es3k2", + "stage": "$default", + "timeEpoch": 1727726558220, + "http": { + "protocol": "HTTP/1.1", + "method": "GET", + "userAgent": "curl/8.7.1", + "path": "/", + "sourceIp": "81.0.0.43" + }, + "apiId": "a5q74es3k2", + "accountId": "012345678901", + "requestId": "e72KxgsRoAMEMSA=", + "domainName": "a5q74es3k2.execute-api.us-east-1.amazonaws.com", + "time": "30/Sep/2024:20:02:38 +0000" + }, + "rawQueryString": "", + "routeKey": "$default", + "headers": { + "x-forwarded-for": "81.0.0.43", + "user-agent": "curl/8.7.1", + "host": "a5q74es3k2.execute-api.us-east-1.amazonaws.com", + "accept": "*/*", + "x-amzn-trace-id": "Root=1-66fb03de-07533930192eaf5f540db0cb", + "content-length": "0", + "x-forwarded-proto": "https", + "x-forwarded-port": "443" + }, + "isBase64Encoded": false +} diff --git a/Examples/Testing/template.yaml b/Examples/Testing/template.yaml new file mode 100644 index 00000000..c981c978 --- /dev/null +++ b/Examples/Testing/template.yaml @@ -0,0 +1,31 @@ +AWSTemplateFormatVersion: '2010-09-09' +Transform: AWS::Serverless-2016-10-31 +Description: SAM Template for APIGateway Lambda Example + +Resources: + # Lambda function + APIGatewayLambda: + Type: AWS::Serverless::Function + Properties: + CodeUri: .build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/APIGatewayLambda/APIGatewayLambda.zip + Timeout: 60 + Handler: swift.bootstrap # ignored by the Swift runtime + Runtime: provided.al2 + MemorySize: 512 + Architectures: + - arm64 + Environment: + Variables: + # by default, AWS Lambda runtime produces no log + # use `LOG_LEVEL: debug` for for lifecycle and event handling information + # use `LOG_LEVEL: trace` for detailed input event information + LOG_LEVEL: trace + Events: + HttpApiEvent: + Type: HttpApi + +Outputs: + # print API Gateway endpoint + APIGatewayEndpoint: + Description: API Gateway endpoint UR" + Value: !Sub "https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com" From f65ec32c4dbb7af39446f3f8f3d0f65cfee4a444 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Wed, 25 Dec 2024 07:43:51 +0100 Subject: [PATCH 091/177] [doc] add a deployment guide and update the readme (#432) As discussed with @0xTim This PR - adds a minimal example of deployment using SAM in the README - adds a `Deployment.md` Swift Docc file to cover deployment with the AWS console, CLI, SAM, and CDK. It mentions and contains a call to contributions to further examples for third-party tools such as the Serverless Framework, Terraform, or Pulumi. --- Examples/_MyFirstFunction/.gitignore | 8 + Examples/_MyFirstFunction/clean.sh | 36 + .../create_and_deploy_function.sh | 194 ++++++ .../Documentation.docc/Deployment.md | 624 ++++++++++++++++++ .../Documentation.docc/Documentation.md | 5 +- .../img/deployment/console-10-regions.png | Bin 0 -> 54926 bytes .../img/deployment/console-20-dashboard.png | Bin 0 -> 69044 bytes .../deployment/console-30-create-function.png | Bin 0 -> 72186 bytes .../deployment/console-40-select-zip-file.png | Bin 0 -> 68312 bytes .../img/deployment/console-50-upload-zip.png | Bin 0 -> 17354 bytes .../console-60-prepare-test-event.png | Bin 0 -> 42334 bytes .../console-70-view-invocation-response.png | Bin 0 -> 76048 bytes .../deployment/console-80-delete-function.png | Bin 0 -> 32924 bytes .../img/deployment/console-80-delete-role.png | Bin 0 -> 29266 bytes readme.md | 106 ++- 15 files changed, 955 insertions(+), 18 deletions(-) create mode 100644 Examples/_MyFirstFunction/.gitignore create mode 100755 Examples/_MyFirstFunction/clean.sh create mode 100755 Examples/_MyFirstFunction/create_and_deploy_function.sh create mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/Deployment.md create mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/img/deployment/console-10-regions.png create mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/img/deployment/console-20-dashboard.png create mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/img/deployment/console-30-create-function.png create mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/img/deployment/console-40-select-zip-file.png create mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/img/deployment/console-50-upload-zip.png create mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/img/deployment/console-60-prepare-test-event.png create mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/img/deployment/console-70-view-invocation-response.png create mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/img/deployment/console-80-delete-function.png create mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/img/deployment/console-80-delete-role.png diff --git a/Examples/_MyFirstFunction/.gitignore b/Examples/_MyFirstFunction/.gitignore new file mode 100644 index 00000000..0023a534 --- /dev/null +++ b/Examples/_MyFirstFunction/.gitignore @@ -0,0 +1,8 @@ +.DS_Store +/.build +/Packages +xcuserdata/ +DerivedData/ +.swiftpm/configuration/registries.json +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +.netrc diff --git a/Examples/_MyFirstFunction/clean.sh b/Examples/_MyFirstFunction/clean.sh new file mode 100755 index 00000000..457e1c8a --- /dev/null +++ b/Examples/_MyFirstFunction/clean.sh @@ -0,0 +1,36 @@ +#!/bin/bash +##===----------------------------------------------------------------------===## +## +## This source file is part of the SwiftAWSLambdaRuntime open source project +## +## Copyright (c) 2017-2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +## Licensed under Apache License v2.0 +## +## See LICENSE.txt for license information +## See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +## +## SPDX-License-Identifier: Apache-2.0 +## +##===----------------------------------------------------------------------===## + +echo "This script deletes the Lambda function and the IAM role created in the previous step and deletes the project files." +read -r -p "Are you you sure you want to delete everything that was created? [y/n] " continue +if [[ ! $continue =~ ^[Yy]$ ]]; then + echo "OK, try again later when you feel ready" + exit 1 +fi + +echo "🚀 Deleting the Lambda function and the role" +aws lambda delete-function --function-name MyLambda +aws iam detach-role-policy \ + --role-name lambda_basic_execution \ + --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole +aws iam delete-role --role-name lambda_basic_execution + +echo "🚀 Deleting the project files" +rm -rf .build +rm -rf ./Sources +rm trust-policy.json +rm Package.swift Package.resolved + +echo "🎉 Done! Your project is cleaned up and ready for a fresh start." \ No newline at end of file diff --git a/Examples/_MyFirstFunction/create_and_deploy_function.sh b/Examples/_MyFirstFunction/create_and_deploy_function.sh new file mode 100755 index 00000000..eb8f6d4f --- /dev/null +++ b/Examples/_MyFirstFunction/create_and_deploy_function.sh @@ -0,0 +1,194 @@ +#!/bin/bash +##===----------------------------------------------------------------------===## +## +## This source file is part of the SwiftAWSLambdaRuntime open source project +## +## Copyright (c) 2017-2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors +## Licensed under Apache License v2.0 +## +## See LICENSE.txt for license information +## See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +## +## SPDX-License-Identifier: Apache-2.0 +## +##===----------------------------------------------------------------------===## + +# Stop the script execution if an error occurs +set -e -o pipefail + +check_prerequisites() { + # check if docker is installed + which docker > /dev/null || (echo "Docker is not installed. Please install Docker and try again." && exit 1) + + # check if aws cli is installed + which aws > /dev/null || (echo "AWS CLI is not installed. Please install AWS CLI and try again." && exit 1) + + # check if user has an access key and secret access key + echo "This script creates and deploys a Lambda function on your AWS Account. + + You must have an AWS account and know an AWS access key, secret access key, and an optional session token. + These values are read from '~/.aws/credentials'. + " + + read -r -p "Are you ready to create your first Lambda function in Swift? [y/n] " continue + if [[ ! $continue =~ ^[Yy]$ ]]; then + echo "OK, try again later when you feel ready" + exit 1 + fi +} + +create_lambda_execution_role() { + role_name=$1 + + # Allow the Lambda service to assume the IAM role + cat < trust-policy.json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + }, + "Action": "sts:AssumeRole" + } + ] +} +EOF + + # Create the IAM role + echo "🔐 Create the IAM role for the Lambda function" + aws iam create-role \ + --role-name "${role_name}" \ + --assume-role-policy-document file://trust-policy.json > /dev/null 2>&1 + + # Attach basic permissions to the role + # The AWSLambdaBasicExecutionRole policy grants permissions to write logs to CloudWatch Logs + echo "🔒 Attach basic permissions to the role" + aws iam attach-role-policy \ + --role-name "${role_name}" \ + --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole > /dev/null 2>&1 + + echo "⏰ Waiting 10 secs for IAM role to propagate..." + sleep 10 +} + +create_swift_project() { + echo "⚡️ Create your Swift Lambda project" + swift package init --type executable --name MyLambda > /dev/null + + echo "📦 Add the AWS Lambda Swift runtime to your project" + # The following commands are commented out until the `lambad-init` plugin will be release + # swift package add-dependency https://github.com/swift-server/swift-aws-lambda-runtime.git --branch main + # swift package add-dependency https://github.com/swift-server/swift-aws-lambda-events.git --branch main + # swift package add-target-dependency AWSLambdaRuntime MyLambda --package swift-aws-lambda-runtime + # swift package add-target-dependency AWSLambdaEvents MyLambda --package swift-aws-lambda-events + cat < Package.swift +// swift-tools-version:6.0 + +import PackageDescription + +let package = Package( + name: "swift-aws-lambda-runtime-example", + platforms: [.macOS(.v15)], + products: [ + .executable(name: "MyLambda", targets: ["MyLambda"]) + ], + dependencies: [ + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main") + ], + targets: [ + .executableTarget( + name: "MyLambda", + dependencies: [ + .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") + ], + path: "." + ) + ] +) +EOF + + echo "📝 Write the Swift code" + # The following command is commented out until the `lambad-init` plugin will be release + # swift package lambda-init --allow-writing-to-package-directory + cat < Sources/main.swift +import AWSLambdaRuntime + +let runtime = LambdaRuntime { + (event: String, context: LambdaContext) in + "Hello \(event)" +} + +try await runtime.run() +EOF + + echo "📦 Compile and package the function for deployment (this might take a while)" + swift package archive --allow-network-connections docker > /dev/null 2>&1 +} + +deploy_lambda_function() { + echo "🚀 Deploy to AWS Lambda" + + # retrieve your AWS Account ID + echo "🔑 Retrieve your AWS Account ID" + AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) + export AWS_ACCOUNT_ID + + # Check if the role already exists + echo "🔍 Check if a Lambda execution IAM role already exists" + aws iam get-role --role-name lambda_basic_execution > /dev/null 2>&1 || create_lambda_execution_role lambda_basic_execution + + # Create the Lambda function + echo "🚀 Create the Lambda function" + aws lambda create-function \ + --function-name MyLambda \ + --zip-file fileb://.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/MyLambda/MyLambda.zip \ + --runtime provided.al2 \ + --handler provided \ + --architectures "$(uname -m)" \ + --role arn:aws:iam::"${AWS_ACCOUNT_ID}":role/lambda_basic_execution > /dev/null 2>&1 + + echo "⏰ Waiting 10 secs for the Lambda function to be ready..." + sleep 10 +} + +invoke_lambda_function() { + # Invoke the Lambda function + echo "🔗 Invoke the Lambda function" + aws lambda invoke \ + --function-name MyLambda \ + --cli-binary-format raw-in-base64-out \ + --payload '"Lambda Swift"' \ + output.txt > /dev/null 2>&1 + + echo "👀 Your Lambda function returned:" + cat output.txt && rm output.txt +} + +main() { + # + # Check prerequisites + # + check_prerequisites + + # + # Create the Swift project + # + create_swift_project + + # + # Now the function is ready to be deployed to AWS Lambda + # + deploy_lambda_function + + # + # Invoke the Lambda function + # + invoke_lambda_function + + echo "" + echo "🎉 Done! Your first Lambda function in Swift is now deployed on AWS Lambda. 🚀" +} + +main "$@" \ No newline at end of file diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Deployment.md b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Deployment.md new file mode 100644 index 00000000..b44db1dc --- /dev/null +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Deployment.md @@ -0,0 +1,624 @@ +# Deploying your Swift Lambda functions + +Learn how to deploy your Swift Lambda functions to AWS. + +There are multiple ways to deploy your Swift code to AWS Lambda. The very first time, you'll probably use the AWS Console to create a new Lambda function and upload your code as a zip file. However, as you iterate on your code, you'll want to automate the deployment process. + +To take full advantage of the cloud, we recommend using Infrastructure as Code (IaC) tools like the [AWS Serverless Application Model (SAM)](https://aws.amazon.com/serverless/sam/) or [AWS Cloud Development Kit (CDK)](https://aws.amazon.com/cdk/). These tools allow you to define your infrastructure and deployment process as code, which can be version-controlled and automated. + +In this section, we show you how to deploy your Swift Lambda functions using different AWS Tools. Alternatively, you might also consider using popular third-party tools like [Serverless Framework](https://www.serverless.com/), [Terraform](https://www.terraform.io/), or [Pulumi](https://www.pulumi.com/) to deploy Lambda functions and create and manage AWS infrastructure. + +Here is the content of this guide: + + * [Prerequisites](#prerequisites) + * [Choosing the AWS Region where to deploy](#choosing-the-aws-region-where-to-deploy) + * [The Lambda execution IAM role](#the-lambda-execution-iam-role) + * [Deploy your Lambda function with the AWS Console](#deploy-your-lambda-function-with-the-aws-console) + * [Deploy your Lambda function with the AWS Command Line Interface (CLI)](#deploy-your-lambda-function-with-the-aws-command-line-interface-cli) + * [Deploy your Lambda function with AWS Serverless Application Model (SAM)](#deploy-your-lambda-function-with-aws-serverless-application-model-sam) + * [Deploy your Lambda function with AWS Cloud Development Kit (CDK)](#deploy-your-lambda-function-with-aws-cloud-development-kit-cdk) + * [Third-party tools](#third-party-tools) + +## Prerequisites + +1. Your AWS Account + + To deploy a Lambda function on AWS, you need an AWS account. If you don't have one yet, you can create a new account at [aws.amazon.com](https://signin.aws.amazon.com/signup?request_type=register). It takes a few minutes to register. A credit card is required. + + We do not recommend using the root credentials you entered at account creation time for day-to-day work. Instead, create an [Identity and Access Manager (IAM) user](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) with the necessary permissions and use its credentials. + + Follow the steps in [Create an IAM User in your AWS account](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html). + + We suggest to attach the `AdministratorAccess` policy to the user for the initial setup. For production workloads, you should follow the principle of least privilege and grant only the permissions required for your users. The ['AdministratorAccess' gives the user permission](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) to manage all resources on the AWS account. + +2. AWS Security Credentials + + [AWS Security Credentials](https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html) are required to access the AWS console, AWS APIs, or to let tools access your AWS account. + + AWS Security Credentials can be **long-term credentials** (for example, an Access Key ID and a Secret Access Key attached to your IAM user) or **temporary credentials** obtained via other AWS API, such as when accessing AWS through single sign-on (SSO) or when assuming an IAM role. + + To follow the steps in this guide, you need to know your AWS Access Key ID and Secret Access Key. If you don't have them, you can create them in the AWS Management Console. Follow the steps in [Creating access keys for an IAM user](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_CreateAccessKey). + + When you use SSO with your enterprise identity tools (such as Microsoft entra ID –formerly Active Directory–, Okta, and others) or when you write scripts or code assuming an IAM role, you receive temporary credentials. These credentials are valid for a limited time, have a limited scope, and are rotated automatically. You can use them in the same way as long-term credentials. In addition to an AWS Access Key and Secret Access Key, temporary credentials include a session token. + + Here is a typical set of temporary credentials (redacted for security). + + ```json + { + "Credentials": { + "AccessKeyId": "ASIA...FFSD", + "SecretAccessKey": "Xn...NL", + "SessionToken": "IQ...pV", + "Expiration": "2024-11-23T11:32:30+00:00" + } + } + ``` + +3. A Swift Lambda function to deploy. + + You need a Swift Lambda function to deploy. If you don't have one yet, you can use one of the examples in the [Examples](https://github.com/swift-server/swift-aws-lambda-runtime/tree/main/Examples) directory. + + Compile and package the function using the following command + + ```sh + swift package archive --allow-network-connections docker + ``` + + This command creates a ZIP file with the compiled Swift code. The ZIP file is located in the `.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/MyLambda/MyLambda.zip` folder. + + The name of the ZIP file depends on the target name you entered in the `Package.swift` file. + +## Choosing the AWS Region where to deploy + +[AWS Global infrastructure](https://aws.amazon.com/about-aws/global-infrastructure/) spans over 34 geographic Regions (and continuously expanding). When you create a resource on AWS, such as a Lambda function, you have to select a geographic region where the resource will be created. The two main factors to consider to select a Region are the physical proximity with your users and geographical compliance. + +Physical proximity helps you reduce the network latency between the Lambda function and your customers. For example, when the majority of your users are located in South-East Asia, you might consider deploying in the Singapore, the Malaysia, or Jakarta Region. + +Geographical compliance, also known as data residency compliance, involves following location-specific regulations about how and where data can be stored and processed. + +## The Lambda execution IAM role + +A Lambda execution role is an AWS Identity and Access Management (IAM) role that grants your Lambda function the necessary permissions to interact with other AWS services and resources. Think of it as a security passport that determines what your function is allowed to do within AWS. For example, if your Lambda function needs to read files from Amazon S3, write logs to Amazon CloudWatch, or access an Amazon DynamoDB table, the execution role must include the appropriate permissions for these actions. + +When you create a Lambda function, you must specify an execution role. This role contains two main components: a trust policy that allows the Lambda service itself to assume the role, and permission policies that determine what AWS resources the function can access. By default, Lambda functions get basic permissions to write logs to CloudWatch Logs, but any additional permissions (like accessing S3 buckets or sending messages to SQS queues) must be explicitly added to the role's policies. Following the principle of least privilege, it's recommended to grant only the minimum permissions necessary for your function to operate, helping maintain the security of your serverless applications. + +## Deploy your Lambda function with the AWS Console + +In this section, we deploy the HelloWorld example function using the AWS Console. The HelloWorld function is a simple function that takes a `String` as input and returns a `String`. + +Authenticate on the AWS console using your IAM username and password. On the top right side, select the AWS Region where you want to deploy, then navigate to the Lambda section. + +![Console - Select AWS Region](console-10-regions) + +### Create the function + +Select **Create a function** to create a function. + +![Console - Lambda dashboard when there is no function](console-20-dashboard) + +Select **Author function from scratch**. Enter a **Function name** (`HelloWorld`) and select `Amazon Linux 2` as **Runtime**. +Select the architecture. When you compile your Swift code on a x84_64 machine, such as an Intel Mac, select `x86_64`. When you compile your Swift code on an Arm machine, such as the Apple Silicon M1 or more recent, select `arm64`. + +Select **Create function** + +![Console - create function](console-30-create-function) + +On the right side, select **Upload from** and select **.zip file**. + +![Console - select zip file](console-40-select-zip-file) + +Select the zip file created with the `swift package archive --allow-network-connections docker` command as described in the [Prerequisites](#prerequisites) section. + +Select **Save** + +![Console - select zip file](console-50-upload-zip) + +You're now ready to test your function. + +### Invoke the function + +Select the **Test** tab in the console and prepare a payload to send to your Lambda function. In this example, you've deployed the [HelloWorld](Exmaples.HelloWorld/README.md) example function. As explained, the function takes a `String` as input and returns a `String`. we will therefore create a test event with a JSON payload that contains a `String`. + +Select **Create new event**. Enter an **Event name**. Enter `"Swift on Lambda"` as **Event JSON**. Note that the payload must be a valid JSON document, hence we use surrounding double quotes (`"`). + +Select **Test** on the upper right side of the screen. + +![Console - prepare test event](console-60-prepare-test-event) + +The response of the invocation and additional meta data appear in the green section of the page. + +You can see the response from the Swift code: `Hello Swift on Lambda`. + +The function consumed 109.60ms of execution time, out of this 83.72ms where spent to initialize this new runtime. This initialization time is known as Lambda cold start time. + +> Lambda cold start time refers to the initial delay that occurs when a Lambda function is invoked for the first time or after being idle for a while. Cold starts happen because AWS needs to provision and initialize a new container, load your code, and start your runtime environment (in this case, the Swift runtime). This delay is particularly noticeable for the first invocation, but subsequent invocations (known as "warm starts") are typically much faster because the container and runtime are already initialized and ready to process requests. Cold starts are an important consideration when architecting serverless applications, especially for latency-sensitive workloads. Usually, compiled languages, such as Swift, Go, and Rust, have shorter cold start times compared to interpreted languages, such as Python, Java, Ruby, and Node.js. + +```text + +![Console - view invocation result](console-70-view-invocation-response) + +Select **Test** to invoke the function again with the same payload. + +Observe the results. No initialization time is reported because the Lambda execution environment was ready after the first invocation. The runtime duration of the second invocation is 1.12ms. + +```text +REPORT RequestId: f789fbb6-10d9-4ba3-8a84-27aa283369a2 Duration: 1.12 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 26 MB +``` + +AWS lambda charges usage per number of invocations and the CPU time, rounded to the next millisecond. AWS Lambda offers a generous free-tier of 1 million invocation each month and 400,000 GB-seconds of compute time per month. See [Lambda pricing](https://aws.amazon.com/lambda/pricing/) for the details. + +### Delete the function + +When you're finished with testing, you can delete the Lambda function and the IAM execution role that the console created automatically. + +While you are on the `HelloWorld` function page in the AWS console, select **Actions**, then **Delete function** in the menu on the top-right part of the page. + +![Console - delete function](console-80-delete-function) + +Then, navigate to the IAM section of the AWS console. Select **Roles** on the right-side menu and search for `HelloWorld`. The console appended some random characters to role name. The name you see on your console is different that the one on the screenshot. + +Select the `HelloWorld-role-xxxx` role and select **Delete**. Confirm the deletion by entering the role name again, and select **Delete** on the confirmation box. + +![Console - delete IAM role](console-80-delete-role) + +## Deploy your Lambda function with the AWS Command Line Interface (CLI) + +You can deploy your Lambda function using the AWS Command Line Interface (CLI). The CLI is a unified tool to manage your AWS services from the command line and automate your operations through scripts. The CLI is available for Windows, macOS, and Linux. Follow the [installation](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) and [configuration](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) instructions in the AWS CLI User Guide. + +In this example, we're building the HelloWorld example from the [Examples](https://github.com/swift-server/swift-aws-lambda-runtime/tree/main/Examples) directory. + +### Create the function + +To create a function, you must first create the function execution role and define the permission. Then, you create the function with the `create-function` command. + +The command assumes you've already created the ZIP file with the `swift package archive --allow-network-connections docker` command, as described in the [Prerequisites](#prerequisites) section. + +```sh +# enter your AWS Account ID +export AWS_ACCOUNT_ID=123456789012 + +# Allow the Lambda service to assume the execution role +cat < assume-role-policy.json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + }, + "Action": "sts:AssumeRole" + } + ] +} +EOF + +# Create the execution role +aws iam create-role \ +--role-name lambda_basic_execution \ +--assume-role-policy-document file://assume-role-policy.json + +# create permissions to associate with the role +cat < permissions.json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents" + ], + "Resource": "arn:aws:logs:*:*:*" + } + ] +} +EOF + +# Attach the permissions to the role +aws iam put-role-policy \ +--role-name lambda_basic_execution \ +--policy-name lambda_basic_execution_policy \ +--policy-document file://permissions.json + +# Create the Lambda function +aws lambda create-function \ +--function-name MyLambda \ +--zip-file fileb://.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/MyLambda/MyLambda.zip \ +--runtime provided.al2 \ +--handler provided \ +--architectures arm64 \ +--role arn:aws:iam::${AWS_ACCOUNT_ID}:role/lambda_basic_execution +``` + +The `--architectures` flag is only required when you build the binary on an Apple Silicon machine (Apple M1 or more recent). It defaults to `x64`. + +To update the function, use the `update-function-code` command after you've recompiled and archived your code again with the `swift package archive` command. + +```sh +aws lambda update-function-code \ +--function-name MyLambda \ +--zip-file fileb://.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/MyLambda/MyLambda.zip +``` + +### Invoke the function + +Use the `invoke-function` command to invoke the function. You can pass a well-formed JSON payload as input to the function. The payload must be encoded in base64. The CLI returns the status code and stores the response in a file. + +```sh +# invoke the function +aws lambda invoke \ +--function-name MyLambda \ +--payload $(echo \"Swift Lambda function\" | base64) \ +out.txt + +# show the response +cat out.txt + +# delete the response file +rm out.txt +``` + +### Delete the function + +To cleanup, first delete the Lambda funtion, then delete the IAM role. + +```sh +# delete the Lambda function +aws lambda delete-function --function-name MyLambda + +# delete the IAM policy attached to the role +aws iam delete-role-policy --role-name lambda_basic_execution --policy-name lambda_basic_execution_policy + +# delete the IAM role +aws iam delete-role --role-name lambda_basic_execution +``` + +## Deploy your Lambda function with AWS Serverless Application Model (SAM) + +AWS Serverless Application Model (SAM) is an open-source framework for building serverless applications. It provides a simplified way to define the Amazon API Gateway APIs, AWS Lambda functions, and Amazon DynamoDB tables needed by your serverless application. You can define your serverless application in a single file, and SAM will use it to deploy your function and all its dependencies. + +To use SAM, you need to [install the SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html) on your machine. The SAM CLI provides a set of commands to package, deploy, and manage your serverless applications. + +Use SAM when you want to deploy more than a Lambda function. SAM helps you to create additional resources like an API Gateway, an S3 bucket, or a DynamoDB table, and manage the permissions between them. + +### Create the function + +We assume your Swift function is compiled and packaged, as described in the [Prerequisites](#prerequisites) section. + +When using SAM, you describe the infrastructure you want to deploy in a YAML file. The file contains the definition of the Lambda function, the IAM role, and the permissions needed by the function. The SAM CLI uses this file to package and deploy your function. + +You can create a SAM template to define a REST API implemented by AWS API Gateway and a Lambda function with the following command + +```sh +cat < template.yaml +AWSTemplateFormatVersion: '2010-09-09' +Transform: AWS::Serverless-2016-10-31 +Description: SAM Template for APIGateway Lambda Example + +Resources: + # Lambda function + APIGatewayLambda: + Type: AWS::Serverless::Function + Properties: + # the directory name and ZIP file names depends on the Swift executable target name + CodeUri: .build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/APIGatewayLambda/APIGatewayLambda.zip + Timeout: 60 + Handler: swift.bootstrap # ignored by the Swift runtime + Runtime: provided.al2 + MemorySize: 512 + Architectures: + - arm64 + # The events that will trigger this function + Events: + HttpApiEvent: + Type: HttpApi # AWS API Gateway v2 + +Outputs: + # display API Gateway endpoint + APIGatewayEndpoint: + Description: "API Gateway endpoint URI" + Value: !Sub "https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com" +EOF +``` + +In this example, the Lambda function must accept an APIGateway v2 JSON payload as input parameter and return a valid APIGAteway v2 JSON response. See the example code in the [APIGateway example README file](https://github.com/swift-server/swift-aws-lambda-runtime/blob/main/Examples/APIGateway/README.md). + +To deploy the function with SAM, use the `sam deploy` command. The very first time you deploy a function, you should use the `--guided` flag to configure the deployment. The command will ask you a series of questions to configure the deployment. + +Here is the command to deploy the function with SAM: + +```sh +# start the first deployment +sam deploy --guided + +Configuring SAM deploy +====================== + + Looking for config file [samconfig.toml] : Not found + + Setting default arguments for 'sam deploy' + ========================================= + Stack Name [sam-app]: APIGatewayLambda + AWS Region [us-east-1]: + #Shows you resources changes to be deployed and require a 'Y' to initiate deploy + Confirm changes before deploy [y/N]: n + #SAM needs permission to be able to create roles to connect to the resources in your template + Allow SAM CLI IAM role creation [Y/n]: y + #Preserves the state of previously provisioned resources when an operation fails + Disable rollback [y/N]: n + APIGatewayLambda has no authentication. Is this okay? [y/N]: y + Save arguments to configuration file [Y/n]: y + SAM configuration file [samconfig.toml]: + SAM configuration environment [default]: + + Looking for resources needed for deployment: + +(redacted for brevity) + +CloudFormation outputs from deployed stack +-------------------------------------------------------------------------------- +Outputs +-------------------------------------------------------------------------------- +Key APIGatewayEndpoint +Description API Gateway endpoint URI" +Value https://59i4uwbuj2.execute-api.us-east-1.amazonaws.com +-------------------------------------------------------------------------------- + + +Successfully created/updated stack - APIGAtewayLambda in us-east-1 +``` + +To update your function or any other AWS service defined in your YAML file, you can use the `sam deploy` command without the `--guided` flag. + +### Invoke the function + +SAM allows you to invoke the function locally and remotely. + +Local invocations allows you to test your code before uploading it. It requires docker to run. + +```sh +# First, generate a sample event +sam local generate-event apigateway http-api-proxy > event.json + +# Next, invoke the function locally +sam local invoke -e ./event.json + +START RequestId: 3f5096c6-0fd3-4605-b03e-d46658e6b141 Version: $LATEST +END RequestId: 3134f067-9396-4f4f-bebb-3c63ef745803 +REPORT RequestId: 3134f067-9396-4f4f-bebb-3c63ef745803 Init Duration: 0.04 ms Duration: 38.38 msBilled Duration: 39 ms Memory Size: 512 MB Max Memory Used: 512 MB +{"body": "{\"version\":\"2.0\",\"routeKey\":\"$default\",\"rawPath\":\"\\/path\\/to\\/resource\",... REDACTED FOR BREVITY ...., "statusCode": 200, "headers": {"content-type": "application/json"}} +``` + +> If you've previously authenticated to Amazon ECR Public and your auth token has expired, you may receive an authentication error when attempting to do unauthenticated docker pulls from Amazon ECR Public. To resolve this issue, it may be necessary to run `docker logout public.ecr.aws` to avoid the error. This will result in an unauthenticated pull. For more information, see [Authentication issues](https://docs.aws.amazon.com/AmazonECR/latest/public/public-troubleshooting.html#public-troubleshooting-authentication). + +Remote invocations are done with the `sam remote invoke` command. + +```sh +sam remote invoke \ + --stack-name APIGatewayLambda \ + --event-file ./event.json + +Invoking Lambda Function APIGatewayLambda +START RequestId: ec8082c5-933b-4176-9c63-4c8fb41ca259 Version: $LATEST +END RequestId: ec8082c5-933b-4176-9c63-4c8fb41ca259 +REPORT RequestId: ec8082c5-933b-4176-9c63-4c8fb41ca259 Duration: 6.01 ms Billed Duration: 7 ms Memory Size: 512 MB Max Memory Used: 35 MB +{"body":"{\"stageVariables\":{\"stageVariable1\":\"value1\",\"stageVariable2\":\"value2\"},\"rawPath\":\"\\\/path\\\/to\\\/resource\",\"routeKey\":\"$default\",\"cookies\":[\"cookie1\",\"cookie2\"] ... REDACTED FOR BREVITY ... \"statusCode\":200,"headers":{"content-type":"application/json"}} +``` + +SAM allows you to access the function logs from Amazon Cloudwatch. + +```sh +sam logs --stack-name APIGatewayLambda + +Access logging is disabled for HTTP API ID (g9m53sn7xa) +2024/12/19/[$LATEST]4dd42d66282145a2964ff13dfcd5dc65 2024-12-19T10:16:25.593000 INIT_START Runtime Version: provided:al2.v75 Runtime Version ARN: arn:aws:lambda:us-east-1::runtime:4f3438ed7de2250cc00ea1260c3dc3cd430fad27835d935a02573b6cf07ceed8 +2024/12/19/[$LATEST]4dd42d66282145a2964ff13dfcd5dc65 2024-12-19T10:16:25.715000 START RequestId: d8afa647-8361-4bce-a817-c57b92a060af Version: $LATEST +2024/12/19/[$LATEST]4dd42d66282145a2964ff13dfcd5dc65 2024-12-19T10:16:25.758000 END RequestId: d8afa647-8361-4bce-a817-c57b92a060af +2024/12/19/[$LATEST]4dd42d66282145a2964ff13dfcd5dc65 2024-12-19T10:16:25.758000 REPORT RequestId: d8afa647-8361-4bce-a817-c57b92a060af Duration: 40.74 ms Billed Duration: 162 ms Memory Size: 512 MB Max Memory Used: 34 MB Init Duration: 120.64 ms +2024/12/19/[$LATEST]4dd42d66282145a2964ff13dfcd5dc65 2024-12-19T10:17:10.343000 START RequestId: ec8082c5-933b-4176-9c63-4c8fb41ca259 Version: $LATEST +2024/12/19/[$LATEST]4dd42d66282145a2964ff13dfcd5dc65 2024-12-19T10:17:10.350000 END RequestId: ec8082c5-933b-4176-9c63-4c8fb41ca259 +2024/12/19/[$LATEST]4dd42d66282145a2964ff13dfcd5dc65 2024-12-19T10:17:10.350000 REPORT RequestId: ec8082c5-933b-4176-9c63-4c8fb41ca259 Duration: 6.01 ms Billed Duration: 7 ms Memory Size: 512 MB Max Memory Used: 35 MB +``` + +You can also tail the logs with the `-t, --tail` flag. + +### Delete the function + +SAM allows you to delete your function and all infrastructure that is defined in the YAML template with just one command. + +```sh +sam delete + +Are you sure you want to delete the stack APIGatewayLambda in the region us-east-1 ? [y/N]: y +Are you sure you want to delete the folder APIGatewayLambda in S3 which contains the artifacts? [y/N]: y +- Deleting S3 object with key APIGatewayLambda/1b5a27c048549382462bd8ea589f7cfe +- Deleting S3 object with key APIGatewayLambda/396d2c434ecc24aaddb670bd5cca5fe8.template +- Deleting Cloudformation stack APIGatewayLambda + +Deleted successfully +``` + +## Deploy your Lambda function with the AWS Cloud Development Kit (CDK) + +The AWS Cloud Development Kit is an open-source software development framework to define cloud infrastructure in code and provision it through AWS CloudFormation. The CDK provides high-level constructs that preconfigure AWS resources with best practices, and you can use familiar programming languages like TypeScript, Javascript, Python, Java, C#, and Go to define your infrastructure. + +To use the CDK, you need to [install the CDK CLI](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html) on your machine. The CDK CLI provides a set of commands to manage your CDK projects. + +Use the CDK when you want to define your infrastructure in code and manage the deployment of your Lambda function and other AWS services. + +This example deploys the [APIGateway]((https://github.com/swift-server/swift-aws-lambda-runtime/blob/main/Examples/APIGateway/) example code. It comprises a Lambda function that implements a REST API and an API Gateway to expose the function over HTTPS. + +### Create a CDK project + +To create a new CDK project, use the `cdk init` command. The command creates a new directory with the project structure and the necessary files to define your infrastructure. + +```sh +# In your Swift Lambda project folder +mkdir infra && cd infra +cdk init app --language typescript +``` + +In this example, the code to create a Swift Lambda function with the CDK is written in TypeScript. The following code creates a new Lambda function with the `swift` runtime. + +It requires the `@aws-cdk/aws-lambda` package to define the Lambda function. You can install the dependency with the following command: + +```sh +npm install aws-cdk-lib constructs +``` + +Then, in the lib folder, create a new file named `swift-lambda-stack.ts` with the following content: + +```typescript +import * as cdk from 'aws-cdk-lib'; +import * as lambda from 'aws-cdk-lib/aws-lambda'; + +export class LambdaApiStack extends cdk.Stack { + constructor(scope: cdk.App, id: string, props?: cdk.StackProps) { + super(scope, id, props); + + // Create the Lambda function + const lambdaFunction = new lambda.Function(this, 'SwiftLambdaFunction', { + runtime: lambda.Runtime.PROVIDED_AL2, + architecture: lambda.Architecture.ARM_64, + handler: 'bootstrap', + code: lambda.Code.fromAsset('../.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/APIGatewayLambda/APIGatewayLambda.zip'), + memorySize: 512, + timeout: cdk.Duration.seconds(30), + environment: { + LOG_LEVEL: 'debug', + }, + }); + } +} +``` +The code assumes you already built and packaged the APIGateway Lambda function with the `swift package archive --allow-network-connections docker` command, as described in the [Prerequisites](#prerequisites) section. + +You can write code to add an API Gateway to invoke your Lambda function. The following code creates an HTTP API Gateway that triggers the Lambda function. + +```typescript +// in the import section at the top +import * as apigateway from 'aws-cdk-lib/aws-apigatewayv2'; +import { HttpLambdaIntegration } from 'aws-cdk-lib/aws-apigatewayv2-integrations'; + +// in the constructor, after having created the Lambda function +// ... + + // Create the API Gateway + const httpApi = new apigateway.HttpApi(this, 'HttpApi', { + defaultIntegration: new HttpLambdaIntegration({ + handler: lambdaFunction, + }), + }); + + // Output the API Gateway endpoint + new cdk.CfnOutput(this, 'APIGatewayEndpoint', { + value: httpApi.url!, + }); + +// ... +``` + +### Deploy the infrastructure + +To deploy the infrastructure, type the following commands. + +```sh +# Change to the infra directory +cd infra + +# Install the dependencies (only before the first deployment) +npm install + +# Deploy the infrastructure +cdk deploy + +✨ Synthesis time: 2.88s +... redacted for brevity ... +Do you wish to deploy these changes (y/n)? y +... redacted for brevity ... + ✅ LambdaApiStack + +✨ Deployment time: 42.96s + +Outputs: +LambdaApiStack.ApiUrl = https://tyqnjcawh0.execute-api.eu-central-1.amazonaws.com/ +Stack ARN: +arn:aws:cloudformation:eu-central-1:012345678901:stack/LambdaApiStack/e0054390-be05-11ef-9504-065628de4b89 + +✨ Total time: 45.84s +``` + +### Invoke your Lambda function + +To invoke the Lambda function, use this `curl` command line. + +```bash +curl https://tyqnjcawh0.execute-api.eu-central-1.amazonaws.com +``` + +Be sure to replace the URL with the API Gateway endpoint returned in the previous step. + +This should print a JSON similar to + +```bash +{"version":"2.0","rawPath":"\/","isBase64Encoded":false,"rawQueryString":"","headers":{"user-agent":"curl\/8.7.1","accept":"*\/*","host":"a5q74es3k2.execute-api.us-east-1.amazonaws.com","content-length":"0","x-amzn-trace-id":"Root=1-66fb0388-691f744d4bd3c99c7436a78d","x-forwarded-port":"443","x-forwarded-for":"81.0.0.43","x-forwarded-proto":"https"},"requestContext":{"requestId":"e719cgNpoAMEcwA=","http":{"sourceIp":"81.0.0.43","path":"\/","protocol":"HTTP\/1.1","userAgent":"curl\/8.7.1","method":"GET"},"stage":"$default","apiId":"a5q74es3k2","time":"30\/Sep\/2024:20:01:12 +0000","timeEpoch":1727726472922,"domainPrefix":"a5q74es3k2","domainName":"a5q74es3k2.execute-api.us-east-1.amazonaws.com","accountId":"012345678901"} +``` + +If you have `jq` installed, you can use it to pretty print the output. + +```bash +curl -s https://tyqnjcawh0.execute-api.eu-central-1.amazonaws.com | jq +{ + "version": "2.0", + "rawPath": "/", + "requestContext": { + "domainPrefix": "a5q74es3k2", + "stage": "$default", + "timeEpoch": 1727726558220, + "http": { + "protocol": "HTTP/1.1", + "method": "GET", + "userAgent": "curl/8.7.1", + "path": "/", + "sourceIp": "81.0.0.43" + }, + "apiId": "a5q74es3k2", + "accountId": "012345678901", + "requestId": "e72KxgsRoAMEMSA=", + "domainName": "a5q74es3k2.execute-api.us-east-1.amazonaws.com", + "time": "30/Sep/2024:20:02:38 +0000" + }, + "rawQueryString": "", + "routeKey": "$default", + "headers": { + "x-forwarded-for": "81.0.0.43", + "user-agent": "curl/8.7.1", + "host": "a5q74es3k2.execute-api.us-east-1.amazonaws.com", + "accept": "*/*", + "x-amzn-trace-id": "Root=1-66fb03de-07533930192eaf5f540db0cb", + "content-length": "0", + "x-forwarded-proto": "https", + "x-forwarded-port": "443" + }, + "isBase64Encoded": false +} +``` + +### Delete the infrastructure + +When done testing, you can delete the infrastructure with this command. + +```bash +cdk destroy + +Are you sure you want to delete: LambdaApiStack (y/n)? y +LambdaApiStack: destroying... [1/1] +... redacted for brevity ... + ✅ LambdaApiStack: destroyed +``` + +## Third-party tools + +We welcome contributions to this section. If you have experience deploying Swift Lambda functions with third-party tools like Serverless Framework, Terraform, or Pulumi, please share your knowledge with the community. \ No newline at end of file diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Documentation.md b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Documentation.md index 68088df8..4016bcbd 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Documentation.md +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Documentation.md @@ -18,7 +18,6 @@ Swift AWS Lambda Runtime was designed to make building Lambda functions in Swift ### Essentials -- - - - ``LambdaHandler`` - +- +- diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/img/deployment/console-10-regions.png b/Sources/AWSLambdaRuntimeCore/Documentation.docc/img/deployment/console-10-regions.png new file mode 100644 index 0000000000000000000000000000000000000000..afe97b5320eaf96a9f1dc7a498fc5b5c83219f67 GIT binary patch literal 54926 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 _(`;@c3NcGR_>;Wi$|RWw)voeFh-|2ZPZi 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%0DD`(r_91+~s|T3)O*d8HN9h}2ieOrPDps}T4B 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 Ss++No`&>1>Zc<@ literal 0 HcmV?d00001 diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/img/deployment/console-40-select-zip-file.png b/Sources/AWSLambdaRuntimeCore/Documentation.docc/img/deployment/console-40-select-zip-file.png new file mode 100644 index 0000000000000000000000000000000000000000..da4ff924793853365168ef0a39ac542f6a0f2b72 GIT binary patch literal 68312 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

mHKWDyRHZi>;E_C4Id zZl1h6K5j+bQT8yQv*1SIQkWo3HN3xuWW746Pod9JpH|cLjq%BA?a_fp3x74 z$JKen{E}7y)J!h-tSar6*=3J`rfZ+5`n&@`UkFcARzFjm(v9U!?YEeJ@GdLTjKS}@ z|18vECIFKk(RxRr%IcVi=fS59*XOV}2>(FH*{WWqt>&i)4Af?Gx6mpT>Y_Ki<(=ta(6Psm<)(5uJt{!v;)3dLXHRtM@}My_{Jp z_q=n)-Y*vsac%#xHBV%X{wzw?AI4AO55)DN@ntD>0zx#l=MzG7bd-(FwfM)6)>o zmL~m}PO0JHB;SmuBHUGU?OLPCYg&XR6wfD^>%4T6#ElKXGthJA|F!gM2)Zl_C#cil z6r8C5^@m1h+e&L<%ZB!^;MArTKE?4N!%|>O`=Rd5sj*{}cj+MNO5W^kE$U_6WzxvM z)Aa3xD6EtAuIPgV>lFCW#x5#R6^pmB;#CW1eC5dx4vuuCoNr6T`w_sV@R2726N4E3M`a9gMECeleMU zwNvZO%E|%{ryD0arZa2we!PsVU(XIqckCt6aq$!te8(uw>2w3tGIy&l)o$nSb=_~n zxGXO6$kNE-4(|JV$@_g=7BL7j=}|c`<#=8RN2Z9CW*oL|GfTX){GF@*u0tP@EHBfSc~hbgUz!-1)Sj~` zKU}g;+^*;>UVqBX3ct8nS{nD~Syb@FJUFpl`RpLEy3?v9v0Xjoz2tJG-YOF}9%oev z&9+CIXTjf0vtv2Jm(eCY839>O1}g-^-znmemIvHe{OPkBL~ zkGPOa6pd5CnY}U4(Is6*ILXN?CiDkm7B@7=b33lm*yMPI0rgr8xob>l1>8$z#eKS} zw(Il`bA3zYSy*aC|LQIyvcj`sh=dKH0Du&!DE220Zv|JS*r-v#_8J9q*B#MPEbMey zXSv8Wv+=pD5^3tX_kXLzo|&Mq>u#~Mn6>Hee=?ToT!-<2X%HzuiJtRx66qS;|$I!+OuTCk{{l;S%>_hPOVq{qI#^33?=b#Eobze|o z1;E_3XNSQIy<8j`cp?frD4s<=tP~qWy79+{mK4p%-G{fX-*TPa_YEAV2jyc|`fSF= z9sB!sc=`G@8}TiZT8Md7XCy|I2>0rf!B?qH8JEzmY!f=J{XNc!q`lSV8-6p7$~k6$ zOCQV&UfwdkpZhQmsV9aXC?1HorwdLtSB!2oTo>*lSyK#C=hnkfKe0=4(I~r#!s^`P z>|@2;h5F^YX$|2bhd%;kGrdO1VxHT2mk(We6KTlFP0oHdN^CT*etvc6NAvLR_ zs!Hp+`IMt|XcZJ}b)GVF>nqP+`d;69B**l4Qmj8(|K*_7m}K+o=Q)5+I=<5QwGg6~kPr(x!h}|MG-_hXxVsp9f*OCl6`8#5mddkGW~U53J*H z+b!3ag;O4xAlBm;r@2a`E%3)I@-~6~k#!_Q8>@d_i{2NE^X(}PD-5&+19OiI+I2p> zI6Pm6b5l9%wNMH+Qj64s@cx9g8u*^jmT!xcUz#KqJsU{^%& zfN`9F>^Q-i=gcLKRm0<;cP)b|cMr|VjI3k2&YB_yFG$S1nzoBsMzq@iLfI@W72>Cf z$3zDQIwk1dr}<=6p`({I2OD^t>8FD<#YwmpkGy1So_QMd=$p7gPppHTyN?C8X0K{V z&VBl|B?|U#{vYh2(sK1)%?*O>{`F1b?2ShG(~^jEbzLQ>pkt2p zbwK566w)#=Hb}-KhQOLyp4|mW;`M@5+%XHvHM^Nv+rKhHF6s=dI(VX6seljv2=Ik) z5i@q$wnm?i+9mbgs+|v7CzJag(A!m&CkweheQy!u#|om*x2>I&i3~qieEo%322}?dj`w z4AgSDsy}w5@10*E>NUtU{X@iR)@iDX;E$vC?G87S@vF+qkkeH8S-pHZWk_AU=~z-F zfdil8!9lXb=%vaE9CcE9dbvy*i{hrvb=Cg<{>Yo%RC3q*i$lYCv$6Vj6U*fGcCVJh zGU|O-`1Rt9!&LS=ua||F-SB(9*KL~?bd#uh1U3oW|77KE7e{}CxNJm@e&JXe7W6U* zy9SoL2G(>4(A@KY8NZLlEhn4NA<2?&(IR=uI%eXYGZZa8fo+ASt4IX<5~% zlo@A#8WqC65Qi-sf<_ZP5QQ#i&le5yxS!CL38R3#`a89P+avP1M#T5V^Gz#T%jCpV zGE9GCQnlWdENMfXPA_a}4;pUCZ4`~j=2!#w)>3upOu~5Pj3w+83G?mxZMpAGduf$Z z-e9yGTKTd82E5upA;49%= zDNuPL;i_he;q$o}bS386;E7wtm`*emDS8&j^4VwPVckVd+o88CT85k2I-A^r4R~*E z+!gAExw*Hq;a^GYhg~$${I?7;wiZSu##~X{y91&4zVE5lYn{qP@|i@F1nPg(G$G<} zwK7Ky8nC!MP%32nYg|aB-Q9!d0S9G;=G?+jakeihBjb$YV1}mBFHe1+hX#^pEXp21 zLC5Q9LQD*F;+Yu`68C+EbMX6w_jfPRf`CBagIQ@GQettqtI;GMtrxK1xP*j~3awlU zVSRX*GbtJ0ng58r_=E_QG}UtiZ2ehg{N}iwZyMSI%l1t_hSrxA(wGxr%sdujd@oRU zpP+&ql|!ByOiJMN{`LvYLi6B(F!&+*w_Y{`X(QyChUl9cc7 zPz%rrqEpv%2c(22>FMdQ=#Ns;Qu~$p3wHPPl;QciQ?yzV%lv_-W0k% zA1*pJ_1j}1wUGFc$E#jTbF0vxSWJ^6CZku$xtwgga7f(&gA38@YT8J}T5;b4i@I8qlA_;94-+ju#~KFBn6-5iYKAb0MBo zR#J$=BQ+H0E%r2f9K*QG-X;W%SNwhlCMNzE0sr0;sLW5`zyP-UKO z7<^)XKzYNB@mvhU=tIpt2onOYfAW{@5DwqCOXVkQZ;Fm+O!hkk6L6~c{eF0ET2O)| zaz*p%DC&J}gyfUs`Nj$y^t%T)Xn*Do#DpkGLEO-N9$76@A0(c!W?9$r5s5w~BYfwM z6_Tm*_Dmoqd(TuA%K1|`n+5OQgY!KtLf{tb_<$t6md710R9>DC6Rkeo+>M&40g}&D znE)9|moe#M66cUGIr46>rxusvwimh$5I2d}srzSC*S~NbWgcXtHoH6-)c?6??`fh& zVU~PcjRRt=-#q$S;lc8((;*V>lV>md)BX{Bjq~xEC36U5XU*h%-q>IA7Y-vThw-F! zDw|Cm&&yJmG~|0(yI_)@`w3VopK%(EW}QrII&A!fk*e$%HPyc8{2s7e{1|pke zBLZ`YUNj$Yt>%cI^I+ItfVHiSeP*f_2gtY;;AwY6Gtv0QUo5_}wD8eypDmYN4lPK- zw;n|tE0BiaRrAh{Hs-$QZ>h`wP(pg>^_5Rz#+32w&h)~8bGia~8xN+R=ef;Xw8$AN zfpm$P`=*Fk?CR9bZ{9!iGt#_*-%|IDrx2)kY44|N`Ogy*A4)g^Z}hRK{_u1N>)`r| zjH4+KAfslape4xUpSyPNWRgt1=RIh>7;`5Tcy@_hh{bQ@BaU|dlP~xN5QapgNxSKo*NIG@1fP&bA3hCi#dQ9A=h9Qk#Yz%D_D|DIpbTz8Pzs#eR$Zh%Ll^BqQmhF0fGVsvu6GvE!6 zPg~W(L_jU1ai9|X_^%kldjaCM!1J^?Y7JA%C@ONtg5>2!B@h2kppyWV5YncB(#Sf; zY)QRlvSW+@QTNmBX74WuR3-?LQ=KdfIHiFnjL&)CXnTupraijz@%^4M-!__Uj&hu2 zq3qZ8@8vQz-+Hn759D8yABF@p&kS|fBMRr61f#yZRTZM!U~ERV$OBBNfxKn^hXnip z^Jn7VoG% zsNhqNc=}Zc$~XQI@48&^KZeaF@{E?({p}#rb$_jqhSA=gq(xOzTkV2@i5FU8R z)5+aVIk!|bPVhm{d++i@&jF+}r()udouD{!1b;RYSsS6s%Jo5!X!y^?BK*4&UEzI< z9wE!1l6WajIQ~DP`PENg%fcBSX;JY%WAU%H-n$awH0W8f)?MrR|9RZY4$>mvp+m47 zdGWt&BEZ#={2L&+*EOHEbnt&mJ%zg;{c&7OhUV5^(s~{r8}~NZEr#~~KNk*`zfah= zEy%rN3wK1etz0jr+$qrTD`M-un1CO4(nMr=gASsob3M?B7d1%0pjUw1cK5$ z#F2pkNgiI_8y5`m>&#Bv*@a?bEQu;C?DT@tQq1Za2W5I!z8P+>S7ZY%wErO&|59C# z1k;-nQ=;wMG1rKG7Rf6yD?W`?z@Y=Z2|1;MCnkgK>EEKW-h=HtN zpR)X4i{kF^qyT_Cp>I~tM%1*J=lFPPRzK{JUsK_*}y5F z*Av^vf}OZ9>g9e@7~l`%a6lgiIO7y;YS8 zw4Px5%fOka0dk_(EODPxh3Brq#di}l*NMK?)aa`#s}emApCwfYWVAPgY(>M{TkGV! z1SNbte`S*d`H8&;H76=&m}zJ(nX!$iw_zEY+Qd_ndxjU|+BDGX9QP+o#2k7)S5#Lg z@9rW|Qc79Prx?x7V4c%Ljr%iu5v*= zxyFf4fwX-8u#BTl3j0(y?@@Z1=Jfe1z{cihoq1|M3Z-UaQ@MY5;J+QSk5Y04P)=hz z*lczWZ@*pjdO41tGTAB4mUeb-m~a~u4HUra8X+a1po4+3xSN?S02sP%JQ`jP)pYW7Ll+>&DY4p_DOU`HZ)X?DV`R`m&xU?Z0(7HC7kwr<=lmRtQVU)#H>| z#B2PJ>e+bljtq-EKkwT;JtQ(cKt;kt^tYN((o-blb?759T%0kD-w{w4ff|n980o8!f-i};T~-4^!gfE2K(ZvfP7z51M3PmclQ8^ z!}2}q3=KFO88l`Bsm#wb2Lk1QzyMQwqxM(Xa$T24L`K$BfI1is90PM{I|RXJ=l#d2 zmNaz+xZ#R4FkF;34`)&sYc3mSOzJ@Agk3yFFX0M`g4 zIQav8?e{%dD#8&Nkp1LjAM;NwJcR8EukJ_m6jiQz!^#p{3w0m%So?jwj717+1Dm%! z9e&e^ZDu#lu$1i>eE&BRo`|cn9g4MBeV(M=<6`A#!8P1Pc(_xaYu++2cj$r&0wDW>v~8Mo-?d3F+%ru;wZIymgWQ}aZU-Pcg$H0w-rM!Nj+s9KOx~s>no4kB7+_$oSl(E z+B0gHZ`MuVgH;iec7PSx$e(|33adpa>y;e67P$;x5;!kME(4Df6TYRNogJ)7>LHz< zk%)E^E)OYcE`0Z61j(EWgBoi#5bk)txc#PT>s)`AP1}8ku$r1ih_nZaz{TNuUfu1T9u$e^N~1O zUEMB|mq!%s`D5X=7GeS-d{KO(|i|-kt<@(*}V6AX$|H5@ESrU10%p0Dk z0CK?`KsC#y(R)*Ad z!-c&I0lYqKj+g88`&Uz+(%)+{H1*Wz?$FzbwVP~`kwiD&_u->?a!m*s-@k#*twEo) zaO9jn!SfU4i<6JNvu`B5+W@jV7E~lX(E2xVrU`pKU%mR!Ui_ro3}u6 z_GI9IXmQ_~ewBb8HqJ%Zz`WrlO0p3uTU33R#w(kuWSE!;nV1Fy4te@+fsVZzO$$?v zxK#?u7Bfa;10P4lh9LiElE8kG~bqkz5 zR2&r@m}r2`xVA3&B>}PEbawcx%r3BVOIHrqEejP<1B4}wXqHdRSr~o!0B*luCs(=R zq}g!y!L$KFD`}hTZaB-PUj-e-^J<{%?dvaaNjN98xDf@I(=8%zEfc{^lr zoTc`4ToSr|(b&ciG__Ipd>&H9UR5bUyv=^UuE2h{#qQv1I?E|X>Li}gdo>)G3 zwVDTvVhK1+{DtO57!r47wR+GTy=22cP$;UisO4A_SUBg{=xM&iZ(sfP=r0JJMwS$B zXa<7imacWfh2!FicG-I`nJp8JFBb9$G;5A?F|lb|M7Rbu`FWmX8afS3>Du$lo60Yh z)oVpgi;S<&-lzMLj$0e96ahQ_$nsYmZ!W0}J{c1#76+rhf=>XxxWvSAHDUXD6P#fs zX}iS4#M7*nfeIS#xgxpPa5^6SBzk>P@hF^Fb$wrDx|V050^j0mJ(>G&sZe=8FFDPr zp%G~ntrn}2Y1dqak)!!&_%=(Y**mdbT_SL1TP^r}eGc?9iGzqw`e4k_2 zy^m~|tPWui29inf)M&I8W@jHq4{6s-mZu4CZ_DpUSvW)nBd|!zW5rcf8;BhCh9YB~ z1b+jZ0|IGkqpQx?C{D$}G^Va)TEN~1U3T4hs1(LS5rg$-B;W;hM^zhj9upp-uKdxYSA_ZEB z6(DAJtcO~JbhOHPvp#=lI7?)(`IS`kY|B#*xWt5FN?z9C1RfK`VE-_~hiR5JA zJT6N;d_oZTP?KT5jUTY#MAtl(XJcp$MuOwn_i&Pp0Wg90*jT^LEpT0e;4~&}u zp80l>C6+k#4C<<(n?Z_JK!KB#5=jt3Iz7;KH|~fat$9!rD%x9j$0?D)UZLxmn~!F`n&U-PSb)x?r3meCJSL z!ULL4tU0X-cj8XJM5c%>`<7cr2BUe>cp9s)ZO4n4X;ytA43w(Uu7UeuDf#|xIGu{( zGA32cPjz^!IMdV_AbRbevCsY>s3-Q{PAn`eM2szyEojO)zkDA%K^Us`cN>VKA#qQxP)6apuGEo~DI$r+qEJ5S zDQJ9)JMI7pZ`9cCwCheJ_@1bNaDi{x68>~Jk^ZuIInKWIHN`(I1p*9=Ak@3H9)hSo z@hgI2=of5hATUUzB^?pZddlAGE6%d`4ECv7S$|K0gxKl5YhJ*i{~2*^fM@`T^V3gh zGqKivn(-w3_q#4BK#*XCRtt`Epp%a*?7n)4Vxt?sK0f|RtxY(ghdl2mM#gIO@TIzb z@(}*ppXa`xBiAZpB@q=sQT#_l2-pxnm>@xA z&523jLNy(-$UYT_Z^ivIUW{vsPbPkM{(=2#?$nr%*{!o9l*$?G_V`Q#!2Ep0V_40YjJtza$& z6(P7zXlwY9WgZ^Ya@X@fkh7#!ct-pT# z!ss3NJxhXthV`2*VJr$)`-a#r63^!5=_ww<#g?7=`-)s#S4oM4AvPQi2aWI3MOTvX zkQ`A_Xts$tJ%bJ23I1x`N^G~O0Gh$!+_!XQ-#=sVyaN!K(B?jH8Rr-&B#|l!S<0X& zK%xdhkTEPDknyb^C5VWwFyn#Hn=rn~JS9}gIYsw7N2uLP2=PBM21q^$zHp1WdC0OOFSf*jB!gT4IJG zD078^K}DkeMof&=D`8?0_XtcOHBh*M&2cnh^pSlMUWWc!%>c;&(lVXlMj}6{QqZxq99?kA1Z&A)faWj*zW3F0mK9%jtXxPsUURUwJ(4vEuWQrQFEE{3eslBW`- zh(4AP7Z0B4Vrng7RK_Jv#&9fJ`dgrd!&8O+V$rz#lmKF4uwrObG122Baj77$PKfEq z9HY0+u#d}qZ=y-i5swA#h-HKqT1d3m5wH05et@0_npro#{c{jc6SBcl;N_IPQwstf zH))St4%7UeJlhQhkSTw=`57owH!uw)%5FPqob6*G@F0YHY|#l3_4G-=8O{G`85Z?B z4m^cgf8~Q~zU<-`%R48?inms7N5W!S# zAZDD^EA-rYPmo*cFf?D245%MU|4iIE1Om+Gxnyia^buhRf|ADw@)ZFTAGZ?OPXq03 za-5_g0p={OJY!v*>c{Nr1)qdxSDbUU_@Ek4X23Cu^Z->p0jx;j@Wd|xa=Zvq|h zvPZ7&wLejZ9q1%(ws=vQ>b97HBO49*d#|s7X3YP%$W!)URXTd;{oUmO3+IqPAqeQ% z_sTM^IG2PrwbI-`P%AB^HcHTuC*E2@8$@l?edq zB!l%Qw&ycrxi)2ht(3fBE23@<_k*`ctAg~~a8!MjP0?(*Wdt&t=3hpF{Mwd})1~6u z@~s}=C~_LGVEQO3QJZz)7DmGTv|&hPS|7sX_}~YMXU07gmzJs#6PB2w2LA0wlmjV4 z1*~IzH#WxxY8$l2`ELEXLtY4Kr9_ymu!Dv`gFT;NM#HiU<6A4fjn0mw@93A)9(9cs zvNMba{)B?xKXHnE5&*R@`GDRQNV3>_HHHnRJ4JBb4_q;hBdrv`ik83<4XA_y_;>d{ z(Kj(s(S7h=*BMU=ok1l=(2Y5vpS^Mma$)%I%P;GLpY~{BfQpL)vNrUeH zzLLQdlAG)yr|CDJXDg>}dfNEn+YWsiv)+o{*#}wfUgbqNqn+iMug} z#^1yj0@}PrLd5g)bpbKmUW;Z~W^PEFh^Uv8kxC0C9|?1+zSm!+{s`9z_mhTF;~&=?iposL#wklG z-;tNdMh*1+!tkm-eg*wB?Fnb8c*<%O@;7*R`u;IM#*K*IxxR7bVl`vVwcLIX_x`3H(GUO&v6Ow*D zc@-A~Sw7#$SBPY5|qo?`2 ziL_?D3@^FN&=eI_;aE=ESUJ8zvq1+8UM6_B z6X$F3Gf?;2hlg0a49|y#rv0stwypTGGA!Y;ynNz=-2t6#(mG(WQ2?cJ($jErh zz)ABf9GyO4NzYfhtlWx}kkEG7%R}gISN%(c{Ng3#fG4CZ;N|j%lAAR~r>5*A7P8~D z(Rh+1SpCEyfkt)i{q)N|*qT8_QFO^*& zeV_e9H>1qgG^$UP?sY&&YP?{!UbucpMPZ4 z$UP(#{6uGaD;*m~>7a7eUUs1$ls4ezvcvZ)<`YaPX(>TUOJhx?(Z{Ow*J)W|tcCTVA!|i5OHNn-dHki0P#4_?KZO zJfG{LlTr$?>9kZUz2lHX!A2)a6jc6{rFod1@W5-rAuX)T(VN>oNGSbL#VDgf7dh{* zv>l1K?~bn1PYTo-2-Yxh6-@32eHrN~&%6~+2POp$DsM$)w_imRFQ2A3lKk-;_;CA( zZ-pK{VrQ2Wndt*Ua#=D(O-&P71TR(}w%J}5?DUd;4U(+`eaGfP z(N8dL&@ynW5c_n8L_{RBxnO(OrKB8@oc)HpF9ABHg37UBnTJyd<)QV@jPm@|z2bCq z;JNih4#;L$0p`lTM z!~N{OFD5N46jJ|vULn)+lXD578gQAD*e3tI|MhBov0ONaS`h5nlBD7ctmQA(Txb#7 zw?^7lgySq;n~s^xzattfDk2f|W?Fh$A04cZ$-FiAlU@=+(c{JoLWTU*=wT!Y#_k4G zvfSn@UI~GAbc{s1A@gH)ae;p6l!05&i(5|{g4u|9o>o5v2Adm4Y397!Gg~DTMrQ6%4D?Y69CK&q#|hIhmKbeT1;5WY z0f$ivGvxBL_`qQQF#gxh)kt47ALZNQRdTYPk1WmQIrR?KZEtv7TADRV*_GGT+wFGTfy z9}bt|2HFpRtK&m%+pw85h6 zku)8ke2VSJ2ez*;B4WS7eEqWB+_Y}`T$9CJE)rgzbM3Yop-8ASTx_?jZ)bg}y0`S{ z4i2%iE5-3PDP-xAypM{+>v{#5Z_b@1a-woCu>ubYH zSY72ps7JB1v5C*aW+#R9wo(uvAZulh4BlQb=OYj1kn7Tr{oSoXxUCd`3d4G^0}H+1 z%Wb~@>j=(4V|!kr?^(eEZF#s2EEA-7SY~@53!?aEy#2^Yod58Z;U^jb)$(q5o9R=b zT#I6es*_o1PI~*#5w@7Ekz9fCQLGZ%9o*4mMp&*X*!_&_u2_ZKXCo<~m0hb66j)yn za7f)IvqbBa_MY*Q6uW_2e+})}&`~~)jV{B?7bi}yHZkdQmd6WUd_t_GK9f?18nHg< zzm{wFJb?hSzFoDh&ttg$NNaBHr6QehqQ_gND`U$& zlPxldIbavqjU2JobZ=>Q-S(p-Cg#=M1cl0{jIl*ITdIuB{<>w?P?#r}^8K`Q=vEK^ zFaqQ@1U3l%yZ!aV#=uz2s{r7bxF|nD@Q!+8Z44UBr|-vxZ~RumWc-h6uvz1WL?8CC z{)B=aoXGvrL@0l;4I9?m2S4=#h^-I(Dw>r8QwLNd5H(CZULUD41Eu%OYM-9xpq6(r zt(<=h)qDa4U0rfT#ht-mu5v}h-8-4_Ab z(o$pF-J1cTLa}C2cwk6sT55nh$y9Hn`QKyThxlKN_oZ3m7pxeF!Fw(Os*s>=92_sS z2vNL4OnSu2u{!mB&TRiazrMD=nK2mejz=^bK6wrZ44#gExp=9k#nD>znm2d8_9ib6T2LwJ0&oy$?Y%d#7W0iSEB&n0>| zj*H?V(y_zHCrnK5=Glklf5tIBvb%#wBYp#pRv!_A8hGxP0VnnP#sXm^BY5g2q z58~zwASto%dM)kO2(FpTD~dvGo>K?eKM(+5O95>7577J1C#=5+18Vg`%q}arsk*OZr0^Foq|ib(ubO%_Zs%S60}}xy1i%rio2#oo0>b2KC^~cyQyl(c2Zv}G z>WY7m(6~Sj67@IvY`)@~60^a*S*=zKe@S-4*5*#Fbr!+ymh9!_056$%DJ#}rqJC|p z_Q^oeZObvP%R&$R8RFeDYaz5&tp)IF%N9zYhgbk)akz@?D(H!sn(9gF=(NaZE6&1s z!>psAOlxEfd7nNp=z59A<9e<)QspaG}%>7@8ybD zNhEy62YDIj7fJVb|6ZQo7M9M@U;%EcDk|mE2je!mTHd1 z_b+Qu_~Yg{#;@1RkHtTudk2>;ml1U4{s`q%%j3osFM!O9{zaS-A^>a`;blEnK5G;5 zDcJh`F%(SkuoeThn$Lm#%`?y<)_SL&d+Wt9M7SYcc)cCC|Lo*xV1nGpgH_Bb|GzM^ z`5U0Cbl)7R&}Wu5DLNt#Wnx5ooMGDQq|W z14u)iaJg){{zaeNG@^i((0JE8)oFe#Q`c@yeBaAeeO=$^C$}lSe{%Vqj%p@Ap~b7N zkLC(K4%~CfOeV(eAifz!l2(h+7FLRH+UBv4Uhj3p>xSa#Ib{qPiaRMM83()xy zZwsCKV-AGl5P)OpzQv!<9a7l%At5X2((26~XP=y51{CZ3YRJ7a1^%juw~o)HI4Mc3 zw4{P%$iw4YNlA%opAB2RS~q#MmCMq?x_`8Z8lSrFMVzu%vW90~4saP*VR`vjf~t-V z(fS{!f`n+Mvomb|aUn-%PImd#)m1*8BK-eB&pQYJP>jRm;WZ93H9q!RI8``O)NScN-7N%F1qxsuMEuRZVg9(TAU+>ag_@ zawV;&2PC1{@xImdLU+sRZ{qwHsW5<}AVXpBySliHe!V=pDm-F3t((=Sc9;3yOmrpm z_7XYCd@25y0uU22Fmg$Ym0EOi0teFiil7p`4dQS8&4(}*G_Z?WFT+LGL7iy_a3rZ^ON(m`DE_Gr{$Eqf{ zw=@rt7uM8&u}YJ8fRyxB{p-li73YEc7g$uD{&HC8Q7l@aA=Sz(~y3jhTe4eO+}$MI5zy)kxFlTlUy#BK7`; zH-yQ`?7$$8+xCa>?Fu=5vPX%YxS`s5yCsN9#U0Z26}j(+`W7(eS)$Ifx^u6{^R+Pi z@KWb3slz>|%*v2_M#6ao*scEOJvLIng?~xH-){KV5(>n7LL_X@#N9RVXmxT=)xUc* zBTci%6?whd)X`g5TfZvobl#;UEiM{PZKSGysezIO04S-joZ=-o0(fW!1_^Ychz#mqD(kSeLoZBm;ubKq!aIg74?cEO0gi-0dR zy^z_JeLQGoH}R$9XVxnaF&j*3i2|)=-Eao6yH*6(33PU{@sNBN>{@e$UV{?e z%0tdHAs;8BqEcL3|E5(kz4r~L`^ka2U<}W}oxJa2iT+xnEz>CSLN&msk+fH+5fK#~ zDT>4n+CMGke?vv71O#gjFln|^h!Y78r|^B0>N4nQ`k_7_# zKmnXjWPhVn)n0o<``43sW9j9($jFX)qccV7I^Jb>w*)>H8&Khx;NW zI11-$FT&N%w$a>vA`zDg4hl;uyL0_i#IxsoDc+!Ay6xOo$ z)CeCR-*}NfP!ipnhB%+-pt9*{^e@`l3Biv8kOSBapJ{@KDUbmBfGi+O&k7-Dp<>Ga z8!S+)5$x~y%Q)y=%qET2D%_aPMX8(fQ-rBy(^+Lt;r0$;L$kmu6g}ZW8*MiK_jPl* z0U_SkwXZkzqI@qj5%agk%0U(kJTx<$r6!vVqR&sC+m0)rwHT^bP2Pa0_|qhOJsEwE zPtF&fDra$vmum0CqAtF@B~&ytD&LpNFIzPTrGvccrR=X2-+--!?nPb_3pVW#`#Ix9 ze=`v(13d!ozeb9|JLGiGkUgbc$6ZxWa8Lk22YFb^^K$@XgFpv>jbaSe>u{0P^Sz^$ z{1vwmfZ7k&{N0Us>SWHGl#Wg75ud}vi%#GD16H%%v2b4CByZKaVYdm|)LK!lkr6Wq zkl{Y%`(jlx10)vwH~@^91`m>>R8D{JoSm)5=mTJxBk`F#cI7~)fo6G@uMR064}Zjz zTA!3sv1D(oSI%m>$#~5!^`W2>Z=fd2>bWA+(*8dB@|hSKTb-=5IGT}>Fr^@`yE)~;vev=p-%)y= z6SAo;!V=gyZK$A-S5daSxsX#2KxIY%*1}R-;dfVs{u=-kck@9A=>v@8(L8AL~$=Iu^WnAnJ0~I zIY@nF2t(=w#=HIenE(oANZ+$oYPc0$aCgXQ9k~Yt92{8lnHrgC*F}7vxWW`NlyS7q z+d*=iYX^HSc}yd*RgB{w7sr&(&~MN^TL2jmB;f3f`;OTcS-offa-1Tk%$+%3%D~u& zqyC{pYa22$4Lrvy>&7$L4j?WMJCehVYn}_>uXH5GqXG{-xk@2=`j3JK=t-2@f9+_y zWxX`FrkpzQ>i|8oFP#0LQ2R-0uyVg=)RJ}Vi?JyRz^Hhj%^(um>98bxCNjw|)Z>^-nf71w@v-E0!T;3) z$hc~f7ZciWEb1ZiKB~>#glGe@Pplym-PR+_0X@?rwFt=z^D1em%w?$cG)WZcZ=A%~-m4Hc#00@-Kt{DCVfAcI*(>(s5_3f@d_9z<0- zFzYZG;hM{OK38NyQO)|4xJT~M++(eGS1Uo)jiw&NIiOY^{MnZ3+%5qy2o@gWfM1o< zB8WNk5l!qy-vOtoj^8(Sm9On#MN1pNrc5k{Ypm1p=Z*DcG&xIrI2c3t*D>)xCbC2n zhEBq#RxQU6H;L1R9^oyEvyEi1k(W+e;EVEA9XdAQB6?bB0JPQ-5L6D zpS<_B!a`KgYP|r%sQt3-@B7Yy(P+3kHp^oPiW@JSEGE``taN@N;VHs@0iH1Y8mcU5 z&kt+sB)XqoX=doaI+wG*{25>z23aV9s|5T=$ho+*9Pi-LcAJ047-An=%LNQPJ9fQX zj1h43kRe=OE^RV^o`enIvtl>Q0r?oJC53s5qFN&hapCZ~taDVXA>L$iv$RJxYel?I zPQz87`{)9kL;E8`_{_D}Rp@A=olkHn3t?kPG_g%jmtcy>_36SspQ!b5v3yz)iR_4A z6Q~-NnDy|0H4AW*$o&YXcwsJzU>2J%*pz|pIs)8su8IM+leMK`$3cx~P|>o#UjU!E zSSkkVVjJQxEwe}i+1Gtha$2Kr@f|qA(X(8;NoqfRS^K_W=_!R*V&&+Z|G86h;34=Z zEAi^14_?N^H7UEHd#ywVHxoBB{lF$Poxq{GS0l(`TQ7e-Amr`0Bl8PS4E5mhYajnJ z?@RgDhfTfuNv6ZC8vutJ5J4X61tAOCMd?Y$6M%-}hK~fO z2COyNBmtje4^J#&+VC2GdW~qN(DFeZba%iA=h)7;hI_&f4h Yn&ij(fn+jPE%= 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 A2><{9 literal 0 HcmV?d00001 diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/img/deployment/console-50-upload-zip.png b/Sources/AWSLambdaRuntimeCore/Documentation.docc/img/deployment/console-50-upload-zip.png new file mode 100644 index 0000000000000000000000000000000000000000..89eedab9271bc4af67a25d0f74bbc93dec853e0a GIT binary patch literal 17354 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 literal 0 HcmV?d00001 diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/img/deployment/console-80-delete-function.png b/Sources/AWSLambdaRuntimeCore/Documentation.docc/img/deployment/console-80-delete-function.png new file mode 100644 index 0000000000000000000000000000000000000000..f205f47b00bcf5a98ac907734b3de75e6a44b923 GIT binary patch literal 32924 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

p#K^Ko${zuzJP*ci7h}pZ#WG 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 )Fzj~vrMDQQH-tYY6YxN@f1X1FHY_Z<7Y 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 literal 0 HcmV?d00001 diff --git a/readme.md b/readme.md index 0717c3e3..ff88d772 100644 --- a/readme.md +++ b/readme.md @@ -1,9 +1,19 @@ -> [!IMPORTANT] +> [!IMPORTANT] > The documentation included here refers to the Swift AWS Lambda Runtime v2 (code from the main branch). If you're developing for the runtime v1.x, check this [readme](https://github.com/swift-server/swift-aws-lambda-runtime/blob/v1/readme.md) instead. > [!WARNING] > The Swift AWS Runtime v2 is work in progress. We will add more documentation and code examples over time. +This guide contains the follwoing sections: + +- [The Swift AWS Lambda Runtime](#the-swift-aws-lambda-runtime) +- [Pre-requisites](#pre-requisites) +- [Getting started](#getting-started) +- [Developing your Swift Lambda functions](#developing-your-swift-lambda-functions) +- [Testing Locally](#testing-locally) +- [Deploying your Swift Lambda functions](#deploying-your-swift-lambda-functions) +- [Swift AWS Lambda Runtime - Design Principles](#swift-aws-lambda-runtime---design-principles)% + ## The Swift AWS Lambda Runtime Many modern systems have client components like iOS, macOS or watchOS applications as well as server components that those clients interact with. Serverless functions are often the easiest and most efficient way for client application developers to extend their applications into the cloud. @@ -34,6 +44,17 @@ To get started, read [the Swift AWS Lambda runtime v1 tutorial](https://swiftpac Or, if you're impatient to start with runtime v2, try these six steps: +The `Examples/_MyFirstFunction` contains a script that goes through the steps described in this section. + +If you are really impatient, just type: + +```bash +cd Examples/_MyFirstFunction +./create_and_deploy_function.sh +``` + +Otherwise, continue reading. + 1. Create a new Swift executable project ```bash @@ -80,7 +101,15 @@ swift package init --type executable ) ``` -3. Edit `Sources/main.swift` file and replace the content with this code +3. Scaffold a minimal Lambda function + +The runtime comes with a plugin to generate the code of a simple AWS Lambda function: + +```bash +swift package lambda-init --allow-writing-to-package-directory +``` + +Your `Sources/main.swift` file must look like this. ```swift import AWSLambdaRuntime @@ -95,14 +124,15 @@ let runtime = LambdaRuntime { try await runtime.run() ``` -4. Build & archive the package +4. Build & archive the package + +The runtime comes with a plugin to compile on Amazon Linux and create a ZIP archive: ```bash -swift build swift package archive --allow-network-connections docker ``` -If there is no error, there is a ZIP file ready to deploy. +If there is no error, the ZIP archive is ready to deploy. The ZIP file is located at `.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/MyLambda/MyLambda.zip` 5. Deploy to AWS @@ -125,6 +155,13 @@ The `--architectures` flag is only required when you build the binary on an Appl Be sure to replace with your actual AWS account ID (for example: 012345678901). +> [!IMPORTANT] +> Before starting, you need the `lambda_basic_execution` IAM role in your AWS account. +> +> You can create this role in two ways: +> 1. Using AWS Console +> 2. Running the commands in the `create_lambda_execution_role()` function in `Examples/_MyFirstFunction/create_iam_role.sh` + 6. Invoke your Lambda function ```bash @@ -134,7 +171,7 @@ aws lambda invoke \ out.txt && cat out.txt && rm out.txt ``` -This should print +This should print ``` { @@ -144,7 +181,7 @@ This should print "dlroW olleH" ``` -## Developing your Swift Lambda functions +## Developing your Swift Lambda functions ### Receive and respond with JSON objects @@ -221,7 +258,7 @@ You can learn how to deploy and invoke this function in [the streaming example R ### Integration with AWS Services Most Lambda functions are triggered by events originating in other AWS services such as `Amazon SNS`, `Amazon SQS` or `AWS APIGateway`. - + The [Swift AWS Lambda Events](http://github.com/swift-server/swift-aws-lambda-events) package includes an `AWSLambdaEvents` module that provides implementations for most common AWS event types further simplifying writing Lambda functions. Here is an example Lambda function invoked when the AWS APIGateway receives an HTTP request. @@ -241,11 +278,11 @@ try await runtime.run() You can learn how to deploy and invoke this function in [the API Gateway example README file](Examples/APIGateway/README.md). -### Integration with Swift Service LifeCycle +### Integration with Swift Service LifeCycle tbd + link to docc -### Use Lambda Background Tasks +### Use Lambda Background Tasks Background tasks allow code to execute asynchronously after the main response has been returned, enabling additional processing without affecting response latency. This approach is ideal for scenarios like logging, data updates, or notifications that can be deferred. The code leverages Lambda's "Response Streaming" feature, which is effective for balancing real-time user responsiveness with the ability to perform extended tasks post-response. For more information about Lambda background tasks, see [this AWS blog post](https://aws.amazon.com/blogs/compute/running-code-after-returning-a-response-from-an-aws-lambda-function/). @@ -322,10 +359,10 @@ curl -v --header "Content-Type:\ application/json" --data @events/create-session > Accept: */* > Content-Type:\ application/json > Content-Length: 1160 -> +> < HTTP/1.1 200 OK < content-length: 247 -< +< * Connection #0 to host 127.0.0.1 left intact {"statusCode":200,"isBase64Encoded":false,"body":"...","headers":{"Access-Control-Allow-Origin":"*","Content-Type":"application\/json; charset=utf-8","Access-Control-Allow-Headers":"*"}} ``` @@ -343,9 +380,48 @@ LOCAL_LAMBDA_SERVER_INVOCATION_ENDPOINT=/2015-03-31/functions/function/invocatio ## Deploying your Swift Lambda functions +There is a full deployment guide available in [the documentation](https://swiftpackageindex.com/swift-server/swift-aws-lambda-runtime/main/documentation/awslambdaruntime). + +> [!NOTE] +> We will add the deep link to the correct page once published on the [Swift Package Index](https://swiftpackageindex.com/swift-server/swift-aws-lambda-runtime). + +There are multiple ways to deploy your Swift code to AWS Lambda. The very first time, you'll probably use the AWS Console to create a new Lambda function and upload your code as a zip file. However, as you iterate on your code, you'll want to automate the deployment process. + +To take full advantage of the cloud, we recommend using Infrastructure as Code (IaC) tools like the [AWS Serverless Application Model (SAM)](https://aws.amazon.com/serverless/sam/) or [AWS Cloud Development Kit (CDK)](https://aws.amazon.com/cdk/). These tools allow you to define your infrastructure and deployment process as code, which can be version-controlled and automated. + +Alternatively, you might also consider using popular third-party tools like [Serverless Framework](https://www.serverless.com/), [Terraform](https://www.terraform.io/), or [Pulumi](https://www.pulumi.com/) to deploy Lambda functions and create and manage AWS infrastructure. + +Here is a short example that shows how to deploy using SAM. + +**Prerequisites** : Install the [SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html) -TODO +When using SAM, you describe your deployment in a YAML text file. +The [API Gateway example directory](Examples/APIGateway/template.yaml) contains a file named `template.yaml` that you can use as a starting point. + +To deploy your Lambda function and create the infrastructure, type the following `sam` command. + +```bash +sam deploy \ +--resolve-s3 \ +--template-file template.yaml \ +--stack-name APIGatewayLambda \ +--capabilities CAPABILITY_IAM +``` + +At the end of the deployment, the script lists the API Gateway endpoint. +The output is similar to this one. + +``` +----------------------------------------------------------------------------------------------------------------------------- +Outputs +----------------------------------------------------------------------------------------------------------------------------- +Key APIGatewayEndpoint +Description API Gateway endpoint URL" +Value https://a5q74es3k2.execute-api.us-east-1.amazonaws.com +----------------------------------------------------------------------------------------------------------------------------- +``` +Please refer to the full deployment guide available in [the documentation](https://swiftpackageindex.com/swift-server/swift-aws-lambda-runtime/main/documentation/awslambdaruntime) for more details. ## Swift AWS Lambda Runtime - Design Principles @@ -367,8 +443,8 @@ The v2 API prioritizes the following principles: The v2 API introduces two new features: -[Response Streaming](https://aws.amazon.com/blogs/compute/introducing-aws-lambda-response-streaming/]): This functionality is ideal for handling large responses that need to be sent incrementally.   +[Response Streaming](https://aws.amazon.com/blogs/compute/introducing-aws-lambda-response-streaming/]): This functionality is ideal for handling large responses that need to be sent incrementally.   [Background Work](https://aws.amazon.com/blogs/compute/running-code-after-returning-a-response-from-an-aws-lambda-function/): Schedule tasks to run after returning a response to the AWS Lambda control plane. -These new capabilities provide greater flexibility and control when building serverless functions in Swift with the swift-aws-lambda-runtime library. \ No newline at end of file +These new capabilities provide greater flexibility and control when building serverless functions in Swift with the swift-aws-lambda-runtime library. From 38d9e43edbada01f7de3f8b68c0020ee9ee9ed60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Wed, 25 Dec 2024 08:12:42 +0100 Subject: [PATCH 092/177] [CI] Add testing example in the list of integration tests (#444) --- .github/workflows/pull_request.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 2b0ac9e4..e7705a6c 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -36,7 +36,7 @@ jobs: # We pass the list of examples here, but we can't pass an array as argument # Instead, we pass a String with a valid JSON array. # The workaround is mentioned here https://github.com/orgs/community/discussions/11692 - examples: "[ 'APIGateway', 'BackgroundTasks', 'HelloJSON', 'HelloWorld', 'S3_AWSSDK', 'S3_Soto', 'Streaming' ]" + examples: "[ 'APIGateway', 'BackgroundTasks', 'HelloJSON', 'HelloWorld', 'S3_AWSSDK', 'S3_Soto', 'Streaming', 'Testing' ]" archive_plugin_enabled: true From 38cc01a000fe2ea9d2abbd559423607a820feb36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Wed, 25 Dec 2024 20:41:00 +0100 Subject: [PATCH 093/177] [example] Update testing doc for clarity and remove some typos (#445) --- Examples/Testing/README.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Examples/Testing/README.md b/Examples/Testing/README.md index 1b4ce984..3f911b21 100644 --- a/Examples/Testing/README.md +++ b/Examples/Testing/README.md @@ -10,7 +10,7 @@ In this document, we describe four different testing strategies: * [Local invocation using the AWS SAM CLI](#local-invocation-using-the-aws-sam-cli) > [!IMPORTANT] -> In this example, the API Gateway sends a payload to the Lambda function as a JSON string. Your business payload is in the `body` section of the API Gateway payload. It is base64-encoded. You can find an example of the API Gateway payload in the `event.json` file. The API Gateway event format is documented in [Create AWS Lambda proxy integrations for HTTP APIs in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html). +> In this example, the API Gateway sends an event to your Lambda function as a JSON string. Your business payload is in the `body` section of the API Gateway event. It is base64-encoded. You can find an example of the API Gateway event in the `event.json` file. The API Gateway event format is documented in [Create AWS Lambda proxy integrations for HTTP APIs in API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html). To include a sample event in your test targets, you must add the `event.json` file from the `Tests` directory to the binary bundle. To do so, add a `resources` section in your `Package.swift` file: @@ -47,7 +47,8 @@ class BusinessTests { let expectedOutput = arg.1 #expect(input.uppercasedFirst() == expectedOutput) } -}``` +} +``` 2. Add a test target to your `Package.swift` file. ```swift @@ -62,7 +63,7 @@ class BusinessTests { ## Integration Testing the handler function -You can test the handler function by creating an input event, a mock Lambda context, and calling the handler function from your test. +You can test the handler function by creating an input event, a mock Lambda context, and calling your Lambda handler function from your test. Your Lambda handler function must be declared separatly from the `LambdaRuntime`. For example: ```swift @@ -131,9 +132,9 @@ public struct HandlerTest { You can test your Lambda function locally by invoking it with the Swift AWS Lambda Runtime. -You must pass a payload to the Lambda function. You can use the `Tests/event.json` file for this purpose. The return value is a `APIGatewayV2Response` object in this example. +You must pass an event to the Lambda function. You can use the `Tests/event.json` file for this purpose. The return value is a `APIGatewayV2Response` object in this example. -Just type `swift run` to run the Lambda function locally. +Just type `swift run` to run the Lambda function locally, this starts a local HTTP endpoint on localhost:7000. ```sh LOG_LEVEL=trace swift run @@ -151,9 +152,9 @@ This returns the following response: ## Local invocation using the AWS SAM CLI -The AWS SAM CLI provides you with a local testing environment for your Lambda functions. It deploys and invoke your function locally in a Docker container designed to mimic the AWS Lambda environment. +The AWS SAM CLI provides you with a local testing environment for your Lambda functions. It deploys and invokes your function locally in a Docker container designed to mimic the AWS Lambda environment. -You must pass a payload to the Lambda function. You can use the `event.json` file for this purpose. The return value is a `APIGatewayV2Response` object in this example. +You must pass an event to the Lambda function. You can use the `event.json` file for this purpose. The return value is a `APIGatewayV2Response` object in this example. ```sh sam local invoke -e Tests/event.json @@ -167,4 +168,4 @@ END RequestId: 5b71587a-39da-445e-855d-27a700e57efd REPORT RequestId: 5b71587a-39da-445e-855d-27a700e57efd Init Duration: 0.04 ms Duration: 21.57 ms Billed Duration: 22 ms Memory Size: 512 MB Max Memory Used: 512 MB {"body": "Hello world of swift lambda!", "statusCode": 200, "headers": {"content-type": "application/json"}} -``` \ No newline at end of file +``` From 64b1d31184caf28516e305044d594d90326716d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Wed, 1 Jan 2025 21:28:40 +0100 Subject: [PATCH 094/177] [doc] Update readme.md with link to SPI deployment doc (#447) --- readme.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/readme.md b/readme.md index ff88d772..7825f410 100644 --- a/readme.md +++ b/readme.md @@ -380,10 +380,7 @@ LOCAL_LAMBDA_SERVER_INVOCATION_ENDPOINT=/2015-03-31/functions/function/invocatio ## Deploying your Swift Lambda functions -There is a full deployment guide available in [the documentation](https://swiftpackageindex.com/swift-server/swift-aws-lambda-runtime/main/documentation/awslambdaruntime). - -> [!NOTE] -> We will add the deep link to the correct page once published on the [Swift Package Index](https://swiftpackageindex.com/swift-server/swift-aws-lambda-runtime). +There is a full deployment guide available in [the documentation](https://swiftpackageindex.com/swift-server/swift-aws-lambda-runtime/main/documentation/awslambdaruntimecore/deployment). There are multiple ways to deploy your Swift code to AWS Lambda. The very first time, you'll probably use the AWS Console to create a new Lambda function and upload your code as a zip file. However, as you iterate on your code, you'll want to automate the deployment process. From eb9512d0530ecc2304b8fe0d42b12b820222ad16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Wed, 1 Jan 2025 21:29:17 +0100 Subject: [PATCH 095/177] [doc] update quicksetup guide for v2 (#446) Update the quick-setup.md docc file to reflect the Runtime v2 API --- .../Documentation.docc/quick-setup.md | 66 ++++++++++--------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md b/Sources/AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md index 18ecb565..31f831a3 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md @@ -31,17 +31,17 @@ import PackageDescription let package = Package( name: "YourProjetName", platforms: [ - .macOS(.v12), + .macOS(.v15), ], products: [ - .executable(name: "YourFunctionName", targets: ["YourFunctionName"]), + .executable(name: "MyFirstLambdaFunction", targets: ["MyFirstLambdaFunction"]), ], dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha"), + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "main"), ], targets: [ .executableTarget( - name: "YourFunctionName", + name: "MyFirstLambdaFunction", dependencies: [ .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime"), ], @@ -55,48 +55,50 @@ let package = Package( > Be sure to rename the `main.swift` file to something else. -Extends the `SimpleLambdaHandler` protocol and implement `handle(_:context)`. +Create an instance of `LambdaRuntime` and pass as a closure a function with this signature: `(_ : Event, context: LambdaContext) async throws -> Output` (as defined in the `LambdaHandler` protocol). `Event` must be `Decodable`. +If your Lambda function is invoked by another AWS service, use the `AWSLambdaEvent` library at [https://github.com/swift-server/swift-aws-lambda-events](https://github.com/swift-server/swift-aws-lambda-events) to represent the input event. -If your Lambda function is invoked by another AWS service, use the `AWSLambdaEvent` library at [https://github.com/swift-server/swift-aws-lambda-events](https://github.com/swift-server/swift-aws-lambda-events) +Finally, call `runtime.run()` to start the event loop. ```swift -import AWSLambdaRuntime - -struct Input: Codable { - let number: Double +// the data structure to represent the input parameter +struct HelloRequest: Decodable { + let name: String + let age: Int } -struct Number: Codable { - let result: Double +// the data structure to represent the output response +struct HelloResponse: Encodable { + let greetings: String } -@main -struct SquareNumberHandler: SimpleLambdaHandler { - typealias Event = Input - typealias Output = Number - - func handle(_ event: Input, context: LambdaContext) async throws -> Number { - Number(result: event.number * event.number) - } +// the Lambda runtime +let runtime = LambdaRuntime { + (event: HelloRequest, context: LambdaContext) in + + HelloResponse( + greetings: "Hello \(event.name). You look \(event.age > 30 ? "younger" : "older") than your age." + ) } + +// start the loop +try await runtime.run() ``` 4. Test your code locally ```sh -export LOCAL_LAMBDA_SERVER_ENABLED=true - -swift run +swift run # this starts a local server on port 7000 # Switch to another Terminal tab curl --header "Content-Type: application/json" \ --request POST \ - --data '{"number": 3}' \ + --data '{"name": "Seb", "age": 50}' \ http://localhost:7000/invoke -{"result":9} +{"greetings":"Hello Seb. You look younger than your age."} ``` 5. Build and package your code for AWS Lambda @@ -109,24 +111,24 @@ AWS Lambda runtime runs on Amazon Linux. You must compile your code for Amazon L swift package --allow-network-connections docker archive ------------------------------------------------------------------------- -building "squarenumberlambda" in docker +building "MyFirstLambdaFunction" in docker ------------------------------------------------------------------------- updating "swift:amazonlinux2" docker image amazonlinux2: Pulling from library/swift Digest: sha256:5b0cbe56e35210fa90365ba3a4db9cd2b284a5b74d959fc1ee56a13e9c35b378 Status: Image is up to date for swift:amazonlinux2 docker.io/library/swift:amazonlinux2 -building "SquareNumberLambda" +building "MyFirstLambdaFunction" Building for production... ... ------------------------------------------------------------------------- -archiving "SquareNumberLambda" +archiving "MyFirstLambdaFunction" ------------------------------------------------------------------------- 1 archive created - * SquareNumberLambda at /Users/YourUserName/SquareNumberLambda/.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/SquareNumberLambda/SquareNumberLambda.zip + * MyFirstLambdaFunction at /Users/YourUserName/MyFirstLambdaFunction/.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/MyFirstLambdaFunction/MyFirstLambdaFunction.zip -cp .build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/SquareNumberLambda/SquareNumberLambda.zip ~/Desktop +cp .build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/MyFirstLambdaFunction/MyFirstLambdaFunction.zip ~/Desktop ``` 6. Deploy on AWS Lambda @@ -139,9 +141,9 @@ cp .build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/SquareNumberLambda - Select **Provide your own bootstrap on Amazon Linux 2** as **Runtime** - Select an **Architecture** that matches the one of the machine where you build the code. Select **x86_64** when you build on Intel-based Macs or **arm64** for Apple Silicon-based Macs. - Upload the ZIP create during step 5 -- Select the **Test** tab, enter a test event such as `{"number":3}` and select **Test** +- Select the **Test** tab, enter a test event such as `{"name": "Seb", "age": 50}` and select **Test** -If the test succeeds, you will see the result: '{"result":9}' +If the test succeeds, you will see the result: `{"greetings":"Hello Seb. You look younger than your age."}`. Congratulations 🎉! You just wrote, test, build, and deployed a Lambda function written in Swift. From 430af0482837d8cea1e9f1f8f5084338f3df9829 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Fri, 3 Jan 2025 12:28:20 +0100 Subject: [PATCH 096/177] Update quick-setup.md (#451) fix typos --- .../AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md b/Sources/AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md index 31f831a3..bf2f6db4 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/quick-setup.md @@ -23,7 +23,7 @@ swift package init --type executable 2. Add dependencies on `AWSLambdaRuntime` library ```swift -// swift-tools-version:5.8 +// swift-tools-version:6.0 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription @@ -53,9 +53,7 @@ let package = Package( 3. Write your function code. -> Be sure to rename the `main.swift` file to something else. - -Create an instance of `LambdaRuntime` and pass as a closure a function with this signature: `(_ : Event, context: LambdaContext) async throws -> Output` (as defined in the `LambdaHandler` protocol). `Event` must be `Decodable`. +Create an instance of `LambdaRuntime` and pass a function as a closure. The function has this signature: `(_: Event, context: LambdaContext) async throws -> Output` (as defined in the `LambdaHandler` protocol). `Event` must be `Decodable`. `Output` must be `Encodable`. If your Lambda function is invoked by another AWS service, use the `AWSLambdaEvent` library at [https://github.com/swift-server/swift-aws-lambda-events](https://github.com/swift-server/swift-aws-lambda-events) to represent the input event. From fe2cf5d391fffea83cca64042e2adb5b1a3dc7d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Sat, 4 Jan 2025 10:53:27 +0100 Subject: [PATCH 097/177] Update .spi.yml (#452) Move `AWSLambdaRuntimeCore` as first package because this is where all the doc lives. This will make `AWSLambdaRuntimeCore` the default on Swift Package Index --- .spi.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.spi.yml b/.spi.yml index 713eb24a..16792833 100644 --- a/.spi.yml +++ b/.spi.yml @@ -1,4 +1,4 @@ version: 1 builder: configs: - - documentation_targets: [AWSLambdaRuntime, AWSLambdaRuntimeCore] + - documentation_targets: [AWSLambdaRuntimeCore, AWSLambdaRuntime] From 2669009d3b2621eb3216bfa5a2ceab82d682ef15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Stormacq?= Date: Sat, 4 Jan 2025 10:54:37 +0100 Subject: [PATCH 098/177] Update the tutorial for v2 (#450) Update the text, code sample, and screenshots for runtime v2 Address https://github.com/swift-server/swift-aws-lambda-runtime/issues/371 --- .github/workflows/pull_request.yml | 2 +- Examples/Tutorial/.gitignore | 8 ++ Examples/Tutorial/Package.swift | 51 ++++++++ Examples/Tutorial/Sources/main.swift | 48 +++++++ .../Resources/code/.shellcheckrc | 1 + .../Resources/code/03-01-01-package-init.sh | 3 +- .../Resources/code/03-01-02-package-init.sh | 6 +- .../Resources/code/03-01-03-package-init.sh | 7 +- .../Resources/code/03-01-04-package-init.sh | 6 +- .../Resources/code/03-02-01-package.swift | 4 +- .../Resources/code/03-02-02-package.swift | 6 +- .../Resources/code/03-02-03-package.swift | 8 +- .../Resources/code/03-02-04-package.swift | 10 +- .../Resources/code/03-02-05-package.swift | 12 +- .../Resources/code/03-03-01-main.swift | 6 +- .../Resources/code/03-03-02-main.swift | 13 +- .../Resources/code/03-03-03-main.swift | 19 ++- .../Resources/code/03-03-04-main.swift | 19 ++- .../Resources/code/03-03-05-main.swift | 26 ++-- .../Resources/code/03-03-06-main.swift | 35 +++-- .../Resources/code/03-03-07-main.swift | 35 +++++ .../Resources/code/03-04-02-console-output.sh | 2 + .../Resources/code/03-04-03-console-output.sh | 7 - .../Resources/code/03-04-03-curl.sh | 5 + .../Resources/code/03-04-04-curl.sh | 10 +- .../Resources/code/03-04-05-curl.sh | 8 -- .../Resources/code/03-04-06-terminal.sh | 4 +- .../Resources/code/03-04-07-terminal.sh | 8 +- .../Resources/code/03-04-08-terminal.sh | 12 -- .../Resources/code/04-01-02-plugin-archive.sh | 3 - .../Resources/code/04-01-03-plugin-archive.sh | 19 ++- .../Resources/code/04-01-04-plugin-archive.sh | 21 ++- .../Resources/code/04-03-01-aws-cli.sh | 2 - .../code/04-03-02-lambda-invoke-hidden.sh | 4 - .../Resources/code/04-03-02-lambda-invoke.sh | 7 +- .../Resources/code/04-03-03-lambda-invoke.sh | 7 +- .../Resources/code/04-03-04-lambda-invoke.sh | 7 +- .../Resources/code/04-03-05-lambda-invoke.sh | 9 +- .../tutorials/03-01-terminal-package-init.png | Bin 292585 -> 261978 bytes .../Resources/tutorials/03-01-xcode@2x.png | Bin 408771 -> 821978 bytes .../tutorials/03-01-xcode~dark@2x.png | Bin 468781 -> 858347 bytes .../tutorials/03-03-01-rename-file@2x.png | Bin 33226 -> 0 bytes .../03-03-01-rename-file~dark@2x.png | Bin 34743 -> 0 bytes .../tutorials/03-04-01-compile-run@2x.png.png | Bin 0 -> 1146574 bytes .../03-04-01-compile-run~dark@2x.png | Bin 0 -> 1148979 bytes .../tutorials/03-04-01-edit-scheme@2x.png | Bin 128229 -> 0 bytes .../03-04-01-edit-scheme~dark@2x.png | Bin 158203 -> 0 bytes .../tutorials/03-04-02-add-variable@2x.png | Bin 142707 -> 0 bytes .../03-04-02-add-variable~dark@2x.png | Bin 142855 -> 0 bytes .../tutorials/04-02-03-select-region@2x.png | Bin 219240 -> 154887 bytes .../tutorials/04-02-04-select-lambda@2x.png | Bin 200712 -> 432363 bytes .../04-02-04-select-lambda~dark@2x.png | Bin 0 -> 435876 bytes .../tutorials/04-02-05-create-function@2x.png | Bin 159235 -> 230401 bytes .../04-02-05-create-function~dark@2x.png | Bin 158047 -> 230919 bytes .../tutorials/04-02-06-create-function@2x.png | Bin 318161 -> 371421 bytes .../04-02-06-create-function~dark@2x.png | Bin 318332 -> 367667 bytes .../tutorials/04-02-07-upload-zip@2x.png | Bin 234092 -> 327337 bytes .../tutorials/04-02-07-upload-zip~dark@2x.png | Bin 231754 -> 313993 bytes .../tutorials/04-02-08-upload-zip@2x.png | Bin 69901 -> 100167 bytes .../tutorials/04-02-08-upload-zip~dark@2x.png | Bin 69431 -> 100479 bytes .../tutorials/04-02-09-test-lambda@2x.png | Bin 214982 -> 343987 bytes .../04-02-09-test-lambda~dark@2x.png | Bin 215258 -> 347013 bytes .../04-02-10-test-lambda-result@2x.png | Bin 333986 -> 392818 bytes .../04-02-10-test-lambda-result~dark@2x.png | Bin 331726 -> 399836 bytes .../tutorials/01-overview.tutorial | 2 +- .../tutorials/03-write-function.tutorial | 123 +++++++++--------- .../tutorials/04-deploy-function.tutorial | 17 ++- 67 files changed, 377 insertions(+), 225 deletions(-) create mode 100644 Examples/Tutorial/.gitignore create mode 100644 Examples/Tutorial/Package.swift create mode 100644 Examples/Tutorial/Sources/main.swift create mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/.shellcheckrc create mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-07-main.swift create mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-02-console-output.sh delete mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-03-console-output.sh create mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-03-curl.sh delete mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-05-curl.sh delete mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-08-terminal.sh delete mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/tutorials/03-03-01-rename-file@2x.png delete mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/tutorials/03-03-01-rename-file~dark@2x.png create mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/tutorials/03-04-01-compile-run@2x.png.png create mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/tutorials/03-04-01-compile-run~dark@2x.png delete mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/tutorials/03-04-01-edit-scheme@2x.png delete mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/tutorials/03-04-01-edit-scheme~dark@2x.png delete mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/tutorials/03-04-02-add-variable@2x.png delete mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/tutorials/03-04-02-add-variable~dark@2x.png create mode 100644 Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/tutorials/04-02-04-select-lambda~dark@2x.png diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index e7705a6c..48bf5364 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -36,7 +36,7 @@ jobs: # We pass the list of examples here, but we can't pass an array as argument # Instead, we pass a String with a valid JSON array. # The workaround is mentioned here https://github.com/orgs/community/discussions/11692 - examples: "[ 'APIGateway', 'BackgroundTasks', 'HelloJSON', 'HelloWorld', 'S3_AWSSDK', 'S3_Soto', 'Streaming', 'Testing' ]" + examples: "[ 'APIGateway', 'BackgroundTasks', 'HelloJSON', 'HelloWorld', 'S3_AWSSDK', 'S3_Soto', 'Streaming', 'Testing', 'Tutorial' ]" archive_plugin_enabled: true diff --git a/Examples/Tutorial/.gitignore b/Examples/Tutorial/.gitignore new file mode 100644 index 00000000..0023a534 --- /dev/null +++ b/Examples/Tutorial/.gitignore @@ -0,0 +1,8 @@ +.DS_Store +/.build +/Packages +xcuserdata/ +DerivedData/ +.swiftpm/configuration/registries.json +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +.netrc diff --git a/Examples/Tutorial/Package.swift b/Examples/Tutorial/Package.swift new file mode 100644 index 00000000..8fd031c1 --- /dev/null +++ b/Examples/Tutorial/Package.swift @@ -0,0 +1,51 @@ +// swift-tools-version: 6.0 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +import struct Foundation.URL + +let package = Package( + name: "Palindrome", + platforms: [.macOS(.v15)], + dependencies: [ + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main") + ], + targets: [ + // Targets are the basic building blocks of a package, defining a module or a test suite. + // Targets can depend on other targets in this package and products from dependencies. + .executableTarget( + name: "Palindrome", + dependencies: [ + .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") + ] + ) + ] +) + +if let localDepsPath = Context.environment["LAMBDA_USE_LOCAL_DEPS"], + localDepsPath != "", + let v = try? URL(fileURLWithPath: localDepsPath).resourceValues(forKeys: [.isDirectoryKey]), + v.isDirectory == true +{ + // when we use the local runtime as deps, let's remove the dependency added above + let indexToRemove = package.dependencies.firstIndex { dependency in + if case .sourceControl( + name: _, + location: "https://github.com/swift-server/swift-aws-lambda-runtime.git", + requirement: _ + ) = dependency.kind { + return true + } + return false + } + if let indexToRemove { + package.dependencies.remove(at: indexToRemove) + } + + // then we add the dependency on LAMBDA_USE_LOCAL_DEPS' path (typically ../..) + print("[INFO] Compiling against swift-aws-lambda-runtime located at \(localDepsPath)") + package.dependencies += [ + .package(name: "swift-aws-lambda-runtime", path: localDepsPath) + ] +} diff --git a/Examples/Tutorial/Sources/main.swift b/Examples/Tutorial/Sources/main.swift new file mode 100644 index 00000000..db28931d --- /dev/null +++ b/Examples/Tutorial/Sources/main.swift @@ -0,0 +1,48 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the SwiftAWSLambdaRuntime open source project +// +// Copyright (c) 2025 Apple Inc. and the SwiftAWSLambdaRuntime project authors +// Licensed under Apache License v2.0 +// +// See LICENSE.txt for license information +// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors +// +// SPDX-License-Identifier: Apache-2.0 +// +//===----------------------------------------------------------------------===// + +import AWSLambdaRuntime + +// the data structure to represent the input parameter +struct Request: Decodable { + let text: String +} + +// the data structure to represent the response parameter +struct Response: Encodable { + let text: String + let isPalindrome: Bool + let message: String +} + +// the business function +func isPalindrome(_ text: String) -> Bool { + let cleanedText = text.lowercased().filter { $0.isLetter } + return cleanedText == String(cleanedText.reversed()) +} + +// the lambda handler function +let runtime = LambdaRuntime { + (event: Request, context: LambdaContext) -> Response in + + let result = isPalindrome(event.text) + return Response( + text: event.text, + isPalindrome: result, + message: "Your text is \(result ? "a" : "not a") palindrome" + ) +} + +// start the runtime +try await runtime.run() diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/.shellcheckrc b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/.shellcheckrc new file mode 100644 index 00000000..95ac895f --- /dev/null +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/.shellcheckrc @@ -0,0 +1 @@ +disable=all \ No newline at end of file diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-01-package-init.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-01-package-init.sh index be756692..600d8880 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-01-package-init.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-01-package-init.sh @@ -1,3 +1,2 @@ -# shellcheck disable=all # Create a project directory -mkdir SquareNumber && cd SquareNumber \ No newline at end of file +mkdir Palindrome && cd Palindrome diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-02-package-init.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-02-package-init.sh index c991cb0d..dfa52a08 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-02-package-init.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-02-package-init.sh @@ -1,5 +1,5 @@ -# shellcheck disable=all # Create a project directory -mkdir SquareNumber && cd SquareNumber +mkdir Palindrome && cd Palindrome + # create a skeleton project -swift package init --type executable \ No newline at end of file +swift package init --type executable diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-03-package-init.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-03-package-init.sh index 8afef332..54b1c96b 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-03-package-init.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-03-package-init.sh @@ -1,7 +1,8 @@ -# shellcheck disable=all # Create a project directory -mkdir SquareNumber && cd SquareNumber +mkdir Palindrome && cd Palindrome + # create a skeleton project swift package init --type executable + # open Xcode in the current directory -xed . \ No newline at end of file +xed . diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-04-package-init.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-04-package-init.sh index 89167eb5..a8fcbf5d 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-04-package-init.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-01-04-package-init.sh @@ -1,9 +1,11 @@ -# shellcheck disable=all # Create a project directory -mkdir SquareNumber && cd SquareNumber +mkdir Palindrome && cd Palindrome + # create a skeleton project swift package init --type executable + # open Xcode in the current directory xed . + # alternatively, you may open VSCode code . \ No newline at end of file diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-01-package.swift b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-01-package.swift index 9c5606b2..5f1d9b8d 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-01-package.swift +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-01-package.swift @@ -1,8 +1,8 @@ -// swift-tools-version:5.8 +// swift-tools-version:6.0 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( - name: "SquareNumberLambda" + name: "Palindrome" ) diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-02-package.swift b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-02-package.swift index e78f05ad..4fd09eba 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-02-package.swift +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-02-package.swift @@ -1,11 +1,11 @@ -// swift-tools-version:5.8 +// swift-tools-version:6.0 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( - name: "SquareNumberLambda", + name: "Palindrome", platforms: [ - .macOS(.v12) + .macOS(.v15) ] ) diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-03-package.swift b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-03-package.swift index d887ccc1..d1c46993 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-03-package.swift +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-03-package.swift @@ -1,14 +1,14 @@ -// swift-tools-version:5.8 +// swift-tools-version:6.0 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( - name: "SquareNumberLambda", + name: "Palindrome", platforms: [ - .macOS(.v12) + .macOS(.v15) ], dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha") + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main") ] ) diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-04-package.swift b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-04-package.swift index 3afdaae5..89a81437 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-04-package.swift +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-04-package.swift @@ -1,17 +1,17 @@ -// swift-tools-version:5.8 +// swift-tools-version:6.0 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( - name: "SquareNumberLambda", + name: "Palindrome", platforms: [ - .macOS(.v12) + .macOS(.v15) ], products: [ - .executable(name: "SquareNumberLambda", targets: ["SquareNumberLambda"]) + .executable(name: "PalindromeLambda", targets: ["PalindromeLambda"]) ], dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha") + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main") ] ) diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-05-package.swift b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-05-package.swift index 6e484fd6..35801e7c 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-05-package.swift +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-02-05-package.swift @@ -1,22 +1,22 @@ -// swift-tools-version:5.8 +// swift-tools-version:6.0 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( - name: "SquareNumberLambda", + name: "Palindrome", platforms: [ - .macOS(.v12) + .macOS(.v15) ], products: [ - .executable(name: "SquareNumberLambda", targets: ["SquareNumberLambda"]) + .executable(name: "PalindromeLambda", targets: ["PalindromeLambda"]) ], dependencies: [ - .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0-alpha") + .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", branch: "main") ], targets: [ .executableTarget( - name: "SquareNumberLambda", + name: "PalindromeLambda", dependencies: [ .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") ], diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-01-main.swift b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-01-main.swift index 58d19b38..72751f48 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-01-main.swift +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-01-main.swift @@ -1,2 +1,4 @@ -@main -struct SquareNumberHandler: SimpleLambdaHandler {} +// the data structure to represent the input parameter +struct Request: Decodable { + let text: String +} diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-02-main.swift b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-02-main.swift index b4b0b28d..5b0d8e2b 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-02-main.swift +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-02-main.swift @@ -1,4 +1,11 @@ -import AWSLambdaRuntime +// the data structure to represent the input parameter +struct Request: Decodable { + let text: String +} -@main -struct SquareNumberHandler: SimpleLambdaHandler {} +// the data structure to represent the response parameter +struct Response: Encodable { + let text: String + let isPalindrome: Bool + let message: String +} diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-03-main.swift b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-03-main.swift index bf17f189..da6de3de 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-03-main.swift +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-03-main.swift @@ -1,6 +1,17 @@ -import AWSLambdaRuntime +// the data structure to represent the input parameter +struct Request: Decodable { + let text: String +} + +// the data structure to represent the response parameter +struct Response: Encodable { + let text: String + let isPalindrome: Bool + let message: String +} -@main -struct SquareNumberHandler: SimpleLambdaHandler { - func handle(_ event: Event, context: LambdaContext) async throws -> Output {} +// the business function +func isPalindrome(_ text: String) -> Bool { + let cleanedText = text.lowercased().filter { $0.isLetter } + return cleanedText == String(cleanedText.reversed()) } diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-04-main.swift b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-04-main.swift index 6647aec0..4b14c43b 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-04-main.swift +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-04-main.swift @@ -1,14 +1,19 @@ import AWSLambdaRuntime -struct Input: Codable { - let number: Double +// the data structure to represent the input parameter +struct Request: Decodable { + let text: String } -struct Number: Codable { - let result: Double +// the data structure to represent the response parameter +struct Response: Encodable { + let text: String + let isPalindrome: Bool + let message: String } -@main -struct SquareNumberHandler: SimpleLambdaHandler { - func handle(_ event: Event, context: LambdaContext) async throws -> Output {} +// the business function +func isPalindrome(_ text: String) -> Bool { + let cleanedText = text.lowercased().filter { $0.isLetter } + return cleanedText == String(cleanedText.reversed()) } diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-05-main.swift b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-05-main.swift index 805fb5ab..f308e04b 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-05-main.swift +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-05-main.swift @@ -1,17 +1,25 @@ import AWSLambdaRuntime -struct Input: Codable { - let number: Double +// the data structure to represent the input parameter +struct Request: Decodable { + let text: String } -struct Number: Codable { - let result: Double +// the data structure to represent the response parameter +struct Response: Encodable { + let text: String + let isPalindrome: Bool + let message: String } -@main -struct SquareNumberHandler: SimpleLambdaHandler { - typealias Event = Input - typealias Output = Number +// the business function +func isPalindrome(_ text: String) -> Bool { + let cleanedText = text.lowercased().filter { $0.isLetter } + return cleanedText == String(cleanedText.reversed()) +} + +// the lambda handler function +let runtime = LambdaRuntime { + (event: Request, context: LambdaContext) -> Response in - func handle(_ event: Event, context: LambdaContext) async throws -> Output {} } diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-06-main.swift b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-06-main.swift index a8257061..0a382bc1 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-06-main.swift +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-06-main.swift @@ -1,19 +1,32 @@ import AWSLambdaRuntime -struct Input: Codable { - let number: Double +// the data structure to represent the input parameter +struct Request: Decodable { + let text: String } -struct Number: Codable { - let result: Double +// the data structure to represent the response parameter +struct Response: Encodable { + let text: String + let isPalindrome: Bool + let message: String } -@main -struct SquareNumberHandler: SimpleLambdaHandler { - typealias Event = Input - typealias Output = Number +// the business function +func isPalindrome(_ text: String) -> Bool { + let cleanedText = text.lowercased().filter { $0.isLetter } + return cleanedText == String(cleanedText.reversed()) +} + +// the lambda handler function +let runtime = LambdaRuntime { + (event: Request, context: LambdaContext) -> Response in - func handle(_ event: Event, context: LambdaContext) async throws -> Output { - Number(result: event.number * event.number) - } + // call the business function and return a response + let result = isPalindrome(event.text) + return Response( + text: event.text, + isPalindrome: result, + message: "Your text is \(result ? "a" : "not a") palindrome" + ) } diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-07-main.swift b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-07-main.swift new file mode 100644 index 00000000..c777c23b --- /dev/null +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-03-07-main.swift @@ -0,0 +1,35 @@ +import AWSLambdaRuntime + +// the data structure to represent the input parameter +struct Request: Decodable { + let text: String +} + +// the data structure to represent the response parameter +struct Response: Encodable { + let text: String + let isPalindrome: Bool + let message: String +} + +// the business function +func isPalindrome(_ text: String) -> Bool { + let cleanedText = text.lowercased().filter { $0.isLetter } + return cleanedText == String(cleanedText.reversed()) +} + +// the lambda handler function +let runtime = LambdaRuntime { + (event: Request, context: LambdaContext) -> Response in + + // call the business function and return a response + let result = isPalindrome(event.text) + return Response( + text: event.text, + isPalindrome: result, + message: "Your text is \(result ? "a" : "not a") palindrome" + ) +} + +// start the runtime +try await runtime.run() diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-02-console-output.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-02-console-output.sh new file mode 100644 index 00000000..3d862f5d --- /dev/null +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-02-console-output.sh @@ -0,0 +1,2 @@ +2025-01-02T14:59:29+0100 info LocalLambdaServer : [AWSLambdaRuntimeCore] +LocalLambdaServer started and listening on 127.0.0.1:7000, receiving events on /invoke diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-03-console-output.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-03-console-output.sh deleted file mode 100644 index 8e4a9630..00000000 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-03-console-output.sh +++ /dev/null @@ -1,7 +0,0 @@ -# shellcheck disable=all - -2023-04-14T11:42:21+0200 info LocalLambdaServer : [AWSLambdaRuntimeCore] LocalLambdaServer started and listening on 127.0.0.1:7000, receiving events on /invoke -2023-04-14T11:42:21+0200 info Lambda : [AWSLambdaRuntimeCore] lambda runtime starting with LambdaConfiguration - General(logLevel: info)) - Lifecycle(id: 104957691689708, maxTimes: 0, stopSignal: TERM) - RuntimeEngine(ip: 127.0.0.1, port: 7000, requestTimeout: nil diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-03-curl.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-03-curl.sh new file mode 100644 index 00000000..c8f991a2 --- /dev/null +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-03-curl.sh @@ -0,0 +1,5 @@ +curl --header "Content-Type: application/json" \ + --request POST \ + --data '{"text": "Was it a car or a cat I saw?"}' \ + http://127.0.0.1:7000/invoke + diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-04-curl.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-04-curl.sh index 31102f68..7928ac36 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-04-curl.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-04-curl.sh @@ -1,7 +1,7 @@ -# shellcheck disable=all +curl --header "Content-Type: application/json" \ + --request POST \ + --data '{"text": "Was it a car or a cat I saw?"}' \ + http://127.0.0.1:7000/invoke -curl --header "Content-Type: application/json" \ - --request POST \ - --data '{"number": 3}' \ - http://localhost:7000/invoke +{"message":"Your text is a palindrome","isPalindrome":true,"text":"Was it a car or a cat I saw?"} diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-05-curl.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-05-curl.sh deleted file mode 100644 index c5f90a8c..00000000 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-05-curl.sh +++ /dev/null @@ -1,8 +0,0 @@ -# shellcheck disable=all - -curl --header "Content-Type: application/json" \ - --request POST \ - --data '{"number": 3}' \ - http://localhost:7000/invoke - -{"result":9} diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-06-terminal.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-06-terminal.sh index a6439f30..59fc671e 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-06-terminal.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-06-terminal.sh @@ -1,3 +1 @@ -# shellcheck disable=all - -export LOCAL_LAMBDA_SERVER_ENABLED=true +swift run diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-07-terminal.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-07-terminal.sh index 529df84f..6e4d6a3d 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-07-terminal.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-07-terminal.sh @@ -1,4 +1,6 @@ -# shellcheck disable=all - -export LOCAL_LAMBDA_SERVER_ENABLED=true swift run + +Building for debugging... +[1/1] Write swift-version--58304C5D6DBC2206.txt +Build of product 'PalindromeLambda' complete! (0.11s) +2025-01-02T15:12:49+0100 info LocalLambdaServer : [AWSLambdaRuntimeCore] LocalLambdaServer started and listening on 127.0.0.1:7000, receiving events on /invoke diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-08-terminal.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-08-terminal.sh deleted file mode 100644 index 38245018..00000000 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/03-04-08-terminal.sh +++ /dev/null @@ -1,12 +0,0 @@ -# shellcheck disable=all - -export LOCAL_LAMBDA_SERVER_ENABLED=true -swift run - -Building for debugging... -Build complete! (0.20s) -2023-04-14T10:52:25+0200 info LocalLambdaServer : [AWSLambdaRuntimeCore] LocalLambdaServer started and listening on 127.0.0.1:7000, receiving events on /invoke -2023-04-14T10:52:25+0200 info Lambda : [AWSLambdaRuntimeCore] lambda runtime starting with LambdaConfiguration - General(logLevel: info)) - Lifecycle(id: 102943961260250, maxTimes: 0, stopSignal: TERM) - RuntimeEngine(ip: 127.0.0.1, port: 7000, requestTimeout: nil diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-02-plugin-archive.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-02-plugin-archive.sh index 097ba893..1f5ca9d8 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-02-plugin-archive.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-02-plugin-archive.sh @@ -1,4 +1 @@ -# shellcheck disable=all - swift package archive --allow-network-connections docker - diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-03-plugin-archive.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-03-plugin-archive.sh index b85f866b..c760c981 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-03-plugin-archive.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-03-plugin-archive.sh @@ -1,21 +1,20 @@ -# shellcheck disable=all - swift package archive --allow-network-connections docker ------------------------------------------------------------------------- -building "squarenumberlambda" in docker +building "palindrome" in docker ------------------------------------------------------------------------- updating "swift:amazonlinux2" docker image amazonlinux2: Pulling from library/swift - Digest: sha256:5b0cbe56e35210fa90365ba3a4db9cd2b284a5b74d959fc1ee56a13e9c35b378 - Status: Image is up to date for swift:amazonlinux2 + Digest: sha256:df06a50f70e2e87f237bd904d2fc48195742ebda9f40b4a821c4d39766434009 +Status: Image is up to date for swift:amazonlinux2 docker.io/library/swift:amazonlinux2 -building "SquareNumberLambda" +building "PalindromeLambda" + [0/1] Planning build Building for production... -... + [0/2] Write swift-version-24593BA9C3E375BF.txt + Build of product 'PalindromeLambda' complete! (1.91s) ------------------------------------------------------------------------- -archiving "SquareNumberLambda" +archiving "PalindromeLambda" ------------------------------------------------------------------------- 1 archive created - * SquareNumberLambda at /Users/YourUserName/SquareNumberLambda/.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/SquareNumberLambda/SquareNumberLambda.zip - + * PalindromeLambda at /Users/sst/Palindrome/.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/PalindromeLambda/PalindromeLambda.zip diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-04-plugin-archive.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-04-plugin-archive.sh index 93489314..c347694e 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-04-plugin-archive.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-01-04-plugin-archive.sh @@ -1,23 +1,22 @@ -# shellcheck disable=all - swift package archive --allow-network-connections docker ------------------------------------------------------------------------- -building "squarenumberlambda" in docker +building "palindrome" in docker ------------------------------------------------------------------------- updating "swift:amazonlinux2" docker image amazonlinux2: Pulling from library/swift - Digest: sha256:5b0cbe56e35210fa90365ba3a4db9cd2b284a5b74d959fc1ee56a13e9c35b378 - Status: Image is up to date for swift:amazonlinux2 + Digest: sha256:df06a50f70e2e87f237bd904d2fc48195742ebda9f40b4a821c4d39766434009 +Status: Image is up to date for swift:amazonlinux2 docker.io/library/swift:amazonlinux2 -building "SquareNumberLambda" +building "PalindromeLambda" + [0/1] Planning build Building for production... -... + [0/2] Write swift-version-24593BA9C3E375BF.txt + Build of product 'PalindromeLambda' complete! (1.91s) ------------------------------------------------------------------------- -archiving "SquareNumberLambda" +archiving "PalindromeLambda" ------------------------------------------------------------------------- 1 archive created - * SquareNumberLambda at /Users/YourUserName/SquareNumberLambda/.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/SquareNumberLambda/SquareNumberLambda.zip - + * PalindromeLambda at /Users/sst/Palindrome/.build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/PalindromeLambda/PalindromeLambda.zip -cp .build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/SquareNumberLambda/SquareNumberLambda.zip ~/Desktop +cp .build/plugins/AWSLambdaPackager/outputs/AWSLambdaPackager/PalindromeLambda/PalindromeLambda.zip ~/Desktop diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-01-aws-cli.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-01-aws-cli.sh index 8e10fd15..7a33b49d 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-01-aws-cli.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-01-aws-cli.sh @@ -1,3 +1 @@ -# shellcheck disable=all - aws --version diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-02-lambda-invoke-hidden.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-02-lambda-invoke-hidden.sh index ae79ebc6..6c9513cd 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-02-lambda-invoke-hidden.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-02-lambda-invoke-hidden.sh @@ -1,9 +1,5 @@ -# shellcheck disable=all - -# # --region the AWS Region to send the command # --function-name the name of your function # --cli-binary-format tells the cli to use raw data as input (default is base64) # --payload the payload to pass to your function code # result.json the name of the file to store the response from the function - diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-02-lambda-invoke.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-02-lambda-invoke.sh index ba3c2e53..00c96fcb 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-02-lambda-invoke.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-02-lambda-invoke.sh @@ -1,6 +1,3 @@ -# shellcheck disable=all - -# # --region the AWS Region to send the command # --function-name the name of your function # --cli-binary-format tells the cli to use raw data as input (default is base64) @@ -9,8 +6,8 @@ aws lambda invoke \ --region us-west-2 \ - --function-name SquaredNumberLambda \ + --function-name PalindromeLambda \ --cli-binary-format raw-in-base64-out \ - --payload '{"number":3}' \ + --payload '{"text": "Was it a car or a cat I saw?"}' \ result.json diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-03-lambda-invoke.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-03-lambda-invoke.sh index 78818b3b..032c722d 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-03-lambda-invoke.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-03-lambda-invoke.sh @@ -1,6 +1,3 @@ -# shellcheck disable=all - -# # --region the AWS Region to send the command # --function-name the name of your function # --cli-binary-format tells the cli to use raw data as input (default is base64) @@ -9,9 +6,9 @@ aws lambda invoke \ --region us-west-2 \ - --function-name SquaredNumberLambda \ + --function-name PalindromeLambda \ --cli-binary-format raw-in-base64-out \ - --payload '{"number":3}' \ + --payload '{"text": "Was it a car or a cat I saw?"}' \ result.json { diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-04-lambda-invoke.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-04-lambda-invoke.sh index 4cfb4ca8..52b17573 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-04-lambda-invoke.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-04-lambda-invoke.sh @@ -1,6 +1,3 @@ -# shellcheck disable=all - -# # --region the AWS Region to send the command # --function-name the name of your function # --cli-binary-format tells the cli to use raw data as input (default is base64) @@ -9,9 +6,9 @@ aws lambda invoke \ --region us-west-2 \ - --function-name SquaredNumberLambda \ + --function-name PalindromeLambda \ --cli-binary-format raw-in-base64-out \ - --payload '{"number":3}' \ + --payload '{"text": "Was it a car or a cat I saw?"}' \ result.json { diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-05-lambda-invoke.sh b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-05-lambda-invoke.sh index fa8d6653..bb4889b6 100644 --- a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-05-lambda-invoke.sh +++ b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/code/04-03-05-lambda-invoke.sh @@ -1,6 +1,3 @@ -# shellcheck disable=all - -# # --region the AWS Region to send the command # --function-name the name of your function # --cli-binary-format tells the cli to use raw data as input (default is base64) @@ -9,9 +6,9 @@ aws lambda invoke \ --region us-west-2 \ - --function-name SquaredNumberLambda \ + --function-name PalindromeLambda \ --cli-binary-format raw-in-base64-out \ - --payload '{"number":3}' \ + --payload '{"text": "Was it a car or a cat I saw?"}' \ result.json { @@ -20,5 +17,5 @@ aws lambda invoke \ } cat result.json -{"result":9} +{"text":"Was it a car or a cat I saw?","isPalindrome":true,"message":"Your text is a palindrome"} diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/tutorials/03-01-terminal-package-init.png b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/tutorials/03-01-terminal-package-init.png index 4e4a2f2458589675c42be7fd4c79c193a60c69aa..d12e5f9dfc3714f285bb40c9bae309cc90279e41 100644 GIT binary patch literal 261978 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 F{|{xWV`~5a literal 292585 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

a&Ne7fK3lAq08FpBD}~ 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⩔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�mnj5s}W*EhX}w6sjy9o*_Q*ff|K@1d#x>>&XzC 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�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%0D)$hke{DGPEX51;}RB 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

+f(-pc}@oBxAC`G-nbo5W0LFWQYOV?~R- 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%0AW9sZ_6_n)%L1MnCH9S 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 z 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∋@qBFTvTAXrgBz06k+@UbAzvYrjzkjRXpT4A?O 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

xTQ-i zv1|e&2<+Q+>WrHQMu*Q!tTSq)Ac*JSZFe~c0j5^^^$OUw2oW&u46ucvg;|c{txO*z z2W%~4vZhdz4iy?cek4;KqBviQT!2iN9m%K;#Jh96A$UFBRK+2>flVY)Vu4*q43(>M z{|)`bHWNNRdUj)|;jI-VqeJ~O{9o_P-&P--{Qb$~>I6vBetW8?P*&ZpoA0g>Pxq#fo z<5{lBkTL`WKWo~NnU%yb5uh3Av5LIi zg<|wg`q?4$$=1W+5NsFGCpuX4pM;or0HKC7m+c@&xrqKOw2AohF3?mhha%zF8lX!7 zTJ1Q}n%T2#Fl=qC?gJ-)psoB+1lval}Y70_D3iPF-(DCz z<5ZF9yX%X9c~oUQ0o{~D!I6)95dwj)Kn$>Ncij`t`AbfV=I*9O*VSg!e39;o%y3~D zsf;S^X?K$ZXkUIsxiBeyq;+kR&CAfH*-DY}YL$JPl`p(jn4I^R_qb+_62E-8?Pejz z12$-O{073~;FP2lhtz zRmQrVPzBP9CK{Sjj;Of32zR%1>B4_jA9?Vd709RgH9Ol2+(^0FX^leZYVm?P`QG8b zxx`(mHF>eMxD-uX;##Gl?7u>rNKGI!Bf3#ix<{vOvlE^x6&a|nPMI~6dusSP4UHT} zKl^s&+=`(q#W!gH;dI;8WxRR3uK|LO+pwFbIRmT;YSXwRbAkrX

i%C(8*Xv%z-DBm_%=iw-8I3IqUHtu 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

P(HC_wKn(5Swc$Kdz0km&mz(rl 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

dp`bB|NYMov!N&MMr`oo(ygbR zOPExSV7%lqIfB^H2z`iHXf`Yw)0_5Y;#a1HL?`o$w-36%p*{q}o#UqKhxGi7WX~7) zg;Mm){jE9gV&yC@lY6G9dXuU5`#SqQ`x!$OlR?c{B z?t8c~K)X)W5CcYy^*QIr*7vPTeB5D-mHVZ;*Q!;qgykkr(s@2Mei&G8JBTRwD*TITg2>}JWSx;mtA|~8&?HU z!;~IQTLshr*9d%>@>eGouBVF{tI%aTXsw>*NimkUZNvv^&Vo=mr}#N&D1bYV^Nq1K z_C(>i)cm%6Qf@)BT`N!SKi1bl7idjZNx4|DZegiHNvk1`y>l(<=buJoY+A{(==VF( zzGkZ^=;P;Y8Q~DRXY3;w>Bhz?19OIA)dat#dTWMC@k|9+x};3SFZYazxGPz1!#3C} zw3Z%&o85^vTphJueRI&VP;ap_Y1ocuThO0wxhZ2bg4ZV&aVApfC%!bsXnEqGSTELx zh>|pqond!8^|@b6QA)xtTRTyzR(-ARlMiZSwB_BJ4U&`-dU(ZA*7msJ9)=DrtbBf`HBEv1~Fy1k45Uhtj;G)v+X}+`g7@? zwK3+P4vD(nDn1I-ON$nJ>RC;C^B#@zSdn+uQH#FYLt1LM7!}&Ei-KE2`wNFsrD zBx2++zL~GAi?ohAt5H+(1$l_tFr|AN3QFUOlVIDBigse;ArMtd1A$usi!8m7ZPm7G zbx-+U5BLbbX;N;U8FN&)k}7F*j#VwkRujzY{d2rF$-KUpdRP$aXH!9il#oIgbbzn(vG`|9Jh z6a@2K*M;Na^$sax8mbm$0T$kr&L8 zG3B`Et~8hQ#n{g6!|>pw#f_m7SI#zXZE{k8RF!{@mDN10tAsyxHQ!^n@r20Kz1%u} z+1GJ3;@7f(8X$4j2{U15KSCfOMsf(%P)#RVK52H(-wYF7CCDuM$Uea&P+&0%$WPi9!|$yf8P*-x2c->U8b4#;q`E z$#_)~d&p;YNt)ti2^=pqu%Si+*$G@njI2bddLO$+%Olln9>sim#4M@qs%LLI zW+4fhzIJFV-CEVV?vz5*HGxJ;Z={gLlUs>Po;3n5O-5xuZCvY5W>}MQ-xMvc;yyd$5NKH3*=K5eCPs5?WfQ69?pG>7YCbylJ}Ds`7B z*u`uoMkNEFjg_ZJfk%Y114co$U`m!B(dQ)TcQG(Tpi}JY=D(cpe?`Aue<@tw!ZF&r zdKP`YPi8)PsF=s)#MRpg>8-ciKI}|lF{1K4R6{!R_H=HVoYP&mx~5o~*F4%F_Z?PK zYgvmc_xDBm%s)m(nkv<%=l5NnU+TZpS92tyVc)bR>_)cg(Y2<|vbp@VLSoUv!IHgK zqs>HR{>oeOxa3w+BT@R{g;>YjAyocc`ujZMg^Q1>9=KeFm>54l6RD2Huo%T_V}t#n z)iU3K`v2jw{J2w{)thdY&V?teTzfMEVqOt1uV@~8+U-(WQZ#UH%XxXXBv={I^dzvz1XONMX%vXv*Z-ORHm@y!_rqqi(1 zM0YZaL8M@uS&?M;jr|&>Yusti2y3i&BU86@Ubk1wSWfME@m^_-gA*XYjrLAsJxfei zQv5k7hNZF%W9%{i)iLIo`2_Cgghw~8*#ijHV$V|JDABV}NV2g&u}0q4SF9kF;&fzT zQSiCL6wIcIRX&%)Vm)es>P0L_@9>q(dACpBbzIteJB{&xn`LG+p{^w$j}=n#VTFd0 zvvbFkCrEvkqsE2T(u9;;;OiGU;NCt)yzFf<$YlrJ61oM zkv?(32_VT2#(1F~U6U`Ye9Gal^d$h|s*OsP$1W?lnLGB_#HW3|XNmk?JBHfYF0hKn z^fGn7{2hKnIKf4!R~A4 zxnEu#T>Cg3A5Ud{SeQKeZb2j0{!L0|Y0Bet$@6iAxR3d%JN9%Gnf9mpeo^nrG~XWl zU*XID{yUTJ`JI7^1OvJ{2%VS(Hg_Y82daL9Y5NO`*8(7ZuZFE?V6dc{S@bG-IdJ zcup95nA$8@q`!USe3!RuU~i{E0+qtO3}thM$6{L`7X7c^d(7vOx~^T5_v;4plpjRm z&l!DX$Hyi>Pt+1-eR(VveP%6P>4B*=DEnBFV=xH?8)W~wJdK2gH@4p~#*(@#QmtO5}tB4o1s;_y|A1I>pcKENn ziikrx)^)S>)~g>#OSBd|){PvoBi>-}R2hI8IzeNTG5o^O??!B(s#JE#lFeaL>eoX0 z!iJT6dL?xAHaE_dK^&vH=EcrC@eh^`LOIR234c`oLb6ull2JNw?$fovh7{==$y~|{ z|HC(sjyAB>wH`B>i|npe)TJ+tA4`i~Wd6ZCbii*519QF0$tNw-Vo>(dMM-NTr;-y( zyV~b7>UTig@mES-7p>qICl>pHH~(_Nyc$<_T-JP``f8u`%8(?JG`e;a%d4+g?@Tf8 zi$D*T_nDI=YhEDk-fE)NF5^2%FfK9VfR{@6P&D{ZR!8AJkcNu)zCn)bcvHI{C>U-( zNQo1W_`^~6WrCOt*vtnQw66fzU<@Tp=~;^tsK_b4Q)bpm z9_<&++B4cCibwWf&Q4uJI@{PL@H*2XUg6EFH9F<}S7xWEP&Mn*eD(PxW_s7*<4Dy^ zH^UpZY-V#^-1hBas!}7K?hRMM!#_;0$8h>9w%pg%a!{_t{Pm%MK*)_Q$-cvYtT54@ zn!j`pl*x$KrvbL)AsV2H`EshagS42-u%P%{$}j1cp1LIQNvOiVK9fj`4$HSM89$+V zs}*jCFzX{u;!kS7GQYV3vgnea#x$~Q4DBNuI~j9{Jg)QiW&@gN{c9EXQuL$N=PMS8ATz>Bs;T&GGv(+k%UT7+4p^h$i8o5 zAB=SvW-!b?zt249obNfW-ygr-@9Vnm>%QMFVCs0+-gF@YOtO^m zKj*4S2fgb&>5^hP&4{G}BY2eRj1|;MFe7&UG}wv{fcebIsTU_HIWG2rYXD4*s7$wn zqkK0Jf(=AJmh-icM~5$e@f@!z7YcbL!9Dl1@|KR>p#no$Jv{*d_RFYb>pP`!b1AD` z`zCn&@f|LzZy12s45@iPE5$1!uOy>q*LO&f)8OX)@>{{ScVSc2Bs0nT(T*mnT!;!N zp>I&lVB7p2j_A7)goCUbby^`_o3ap=TopZlSo^3nutv_PzU~GEQg9jw-B;(yQ@4Bn z(*65XczeHmM7vV7{8J5YV09)`_Q`2%xsG<1)ZA=Oqi<*CW-jD+C5=dr=Q8Btv!5N$ zDSJ(y|8SNPM!?UW#iAPkSM=bX#k0i558OO+hykG(psLf2rSAFC87}b`#sN0#ckbnf zAjFx)id5(!IOJ6;aBcX>H`9+ zh2V>_!FSDi+K~yM-;y1qDgtACHyfLcdM%+c4fx0mD;i;ZI)kd3CAOCKSLv(ywlfP( zz$d+X_bqqf%cQ5O^%bQi9EM9?-j~Y!v-Dy6`(+_^)L_^K&J}dNuac2IBrLkz+_jaJ zJALVIR%ap*M!i216b{|Ju`!m7K8J$gYoc?MPT0(i$;z;KNM3D&XWoE*8KOAvl zay~aUZ3qk-26~Pp;F0`coS{w%Z%mjF&OSe7wP_|;HwE9O7P zmVQt`1doicF-6IYzbgLBN%;4`vcli$8lfBcjAg2K%G!rzFI=#!Cn_;J*a@Bmi$pdB~cOuinq*R5)<@3K6w zI%xKTEj!MYl%NyzY!A%)HK=>s=F}8?->Jhzke?R@BXBy_XXji!i;cwiy`{u?qX01u-jZ{wvnw!6O&RLPAU?S&uI_t(2`+ zW}uZ$%oW`G8p~yqNA6Hfk4IHpK9jwCJe{HIc;wLWQ>taT$1>INTnu%bN9vv3gk5$E z;Qyy&M#gws6mUI65`mQzBzO&A2o%+gW6NJv6BOV*o~OSSvYHM~!$NbE{rczSFKsO2-gGuwkQ0)UElGU=jV1}tkw>Daq*u(iL zjnA9?6*wrNaxUdD@txkcs!OvV0S#1IseH)UW$;27_FC9)KOuJoLXjxR^vC@P$oRvx zbggRFq~Ll$dl)KsVC*scX)+?X3_}ycoF?0ihU{gm$!TQPz6V_Mf812vNa)P1`qd~J zADm%Ow$fRATD9N%WZThK>e&^wts6|*N38+hm7t*#uk|f2_f5*f0O2~K@v`LQ#Y#W3 z`NXvwMh4!fR-YstP5Jsm_2tsuR>VD+Ck1AUiCB#u${09^n^){N>w#Kr`Fvek6|hC+ zy*iL0=2a-%zw$#YTzj)N0>{q^d>WFX+m^p*q+cqrHAJraA!>d0;cb`QuA4C_+*w6? zV7My`KZXsI*@J2}L@$EFK!M$9j?0d~UCWafnq1MB?Pt8|f%(z|+M#^&<^%$FW?7iY zvld)?n9XMBn@I;^0WFux?s2&w(g^5Sqg3|pL$hn5@#3mwANd#Oq?>H*UgBrn^ExKj zRcjsK+wEnuqX~9?*1TU4bqH<)VjZ)9*{lSv72}Zv)eZEDLLq&xw97_@e+c7w#}0k* za2QG<38j3K!nQnMR?hR2VL}e6cJ?4%+g7NQ0EmMlJD4V+;&XuW;C^s04l0!DFJFBs zP^_08^sgezAtR{?Qwa0}ikxH2UScqu>|7L?_tx~dO4s9U0*$odW5 z;}P!zY+zVyt+NPwr&LI>ZUBoq*T=u~xakhvy;H4rc?5s&D<&TM0z&%u=(bvT!0lgs zoB<2G>lxyUSMu-ne|WHmbHT{|%Mj(i*Uzs!5n_HWuV%GI1hixduq#hMt6nY( zZZ){|Ubn1q9cY>qlFt7e>l0V2${UZFfzBGk**)xszmMy#<_g%k3=b8dw$Wj*Im(C7 zdCW%GIFE*fWkC)iv?fm}N4*7bN0B~GXZD@2uHB^#46hk1Ts5P_!uU){QKEgY$7XRZ zDtk8V;LIi=t*_Y&fvfn`LW0GO<&@@5r|94SB@$7Hb~D0Ct&F#Q9se-s5f2Qf zC|#7_%sQM(tvk(}@CWJGSr4zeCv-3t00kKalt@irxh|$Y1YMPy`C;J_bnEstJd4HHMw1vBC|*5%;EaOvmc?s z{_tVCb&-|(UsKnsbza^z=LemFw}8IeK_<_Xctek^o}3m_NDD^rx^ICXfKA-|Dd6j) zG%r-ec#-P6&R>+H9L|OWJ>xFpWKda)-#~ucrUhU&YJD)!Mcio=Fis){AGbbWTy(aM zzQ{Zh(5^vjd;ebWbZu6`9sw*3uCPW0a$1n+S4mD#2^9#d$*2MVeQA1}rNYucMuLuC zeUn;*ux~=Dzi;y1(iDKnY`;UkXJeL9y}NkLIuG9ffeD{JtC6?60hAf?++?;&Rs`)KhPk~OL3r*uk+zCIaz$HV1291EZ)SKHdKhPV^GF)B#8 zMe87VO3>xm>do9f>#MY`b*)x^f?ww{2KFY`{y#^>Z)*U)&Qz)ZB$N)#D=fnWIP<6U zkL4Hy(oyIj)fEVJ$K}~1#PSC44%wGqd4#r1g^H_w`{4|r+A#!w7O~Mjt~`r-sdg!R zEUp$}N|=6aOo?YI(Up^ZdO}M|@70Ab1BNV@m`_8~0CgSEq{9TP&c*6eaex!xn*UU! z@*NIv>6~_ro3o>Z);Jd+y`q=To=P2YYkl%V-(Twy=U{-+)`Xg}>kaLv*Ru}3S{S*{ zE5&^@B90Ta5)k*#hyjy>U2B5J`X1M9An<_(ZAxd8eayYs*kZ($Gh&*MNAIJm^@IaY zm&{hS=|o<@65N({>eh2TOdVzRG>$(C5fnszy;i9M`j!69&ATYx4Ype{HWmxq>(o*- zdw)IbamN)o@(9}lx;BM-*$67hHqyTcg&w=y83NIT-u7wRGrLR-Kz^S*DARp!4!CEf zYq1l$hgjWT2a^JpNptTc%+Z>gBU@b#S(#4e4#9orfOMKGssgH2sbzsHq3(CWf&pHw@al;x z0ogGVa~atrT;ZGd_)~NxcRYXdzCn<@>ND2H{#oYX_3Z)HZ2_uj^t^|ESSB^T8z7Y3 zh9IeX6dHhQWN_=X+!XRe-*d)V%_L#w2qX{D|F$RPMBLCg(34pN~T= zRb3RaQ@?YIU5r33y|MF9p%Tz))Si46TiSGtYb02N3xcS+!uT7{wl{(F*A)PQPONcP z)&BHiVBgEV%Zb27Qx&zp^eH((Shy;e#qW5x63as9AWo5~R@|>ohn#Xm-;^&E&NP&C zF_Q~IX1KsW8_%Lu%{E7FG59v6^v9}i^lW@j-%Y+2GLoY4)%{e-xUqH1GlV;GQwjRpp^IIR$2D6SplsOB zdyy~hX+5Ad_Ewh$PlSm1AyA7p(nWQ-Xh!DPTT6Ru$8qkg7A$m^3G7@R?c!6w7wPN# z!Rs=^M5MLk9f^_SZ}FU5GVnFGZLw@UdZZITx)+5Wc^8Mt!vOG1G=u+^snyU@Ko#@d%RJ<@gpy}RU7_cvPmRRc-I6Dr zkbyw2w@0@@Z=O0ZC zTAgZj>F|TG9gV)>=3B2AZQW4v#Iw?IZw1P>*0ZfgTgPgiaHyq3%dqUb#Xs=&9y2ZF zUd*V+Qo}dFR-$X|&L#;<&!z1L$1nok7%&xMN4U{;K#L-J0KX1cz)0V0v{##yAoM6c zFbzU==*V1%1`qcbnh;_3H$1zl7~mKb;m`n9iKu%SGzlvO~oC#ee!4pTE$2V0`GrvF(mGRK;6wZngWkB}5^- z{$23Jy{aRGl(pbF)@&7t${T;Olfypzt!0Wl3P6iPU;|?HrcM$eK^CSue{UD)o_*}fFNaV>mXK3hI@CI`qW= z75B2X6wbzC&88MJDT;OBH|?$=3kBQ2!#84ZXofSAwIO0drRBS+Gjk-Ow#sG8J?UCC z|0JPUHHsmtJBx7MMD(B=oA|8V)@?yx5^4)~O1C3oiO zO!oo?n;woyenuNOAfSO>Af z47J)1c(4XGgnjfm|I3`YQ;5LUng;3l*T$*`J9Oqg*pnWKh?6Sq0k3e~LFW%=iXeOE z*_mAL(|JF5f3?uZxh=WemKOW(%ME*t(Yqb`+fVvE^rIu5pQyMLB|{?XK9MKAl{s0|w;vId$oK znDgEr;f)t|qlzh^6FLWg=W2T)RfkA2arGI0N`oH^r}PDY_!z+o#NO-YF69p$e+GS< ze>_<86W)gzTeR28do=|(gc?dPEdGsq8aQKu8iBi-a)s74x~#V0NJs#Ti1%BBAhptq z9HS+v|6#~w6&PIcG$aaLwv&KIV)}8Ngq9DqGC=5xc-|qj1ZnM_41>!(4S4$IkNlBh zPx}iSDVtT!3Ly@T;-JhM!c;YJ<8V#5QR>0A>Nc<7Po2owvty8`i`@Jx!?AvqwN82% zZm%+6bm6RRc~L8sh){eFkP!tg>K?BK~&l9Vk&%<4$I5lEb%^ zgw6YXI%{#LIxu=;aFXfhiv4$k_Fn^inYy!2LIu9*3)gzAqNHg}YyV^24RFJXkS35+ zBAQAAIwz=4{F8*$lid6Dv~NZRj{+#SQY$8I4Y`NyAR+L=#yjTr2LzP$RvdrzrvN|= zIzsHVh)w|j7l^cOLh4(DFl)rZh2cyk5v2qGp`vmv_&PF4>dcZC@OvyGhDRL#dbU&F zI{>g(8R#$F11)+qw24X+u4WUyg#L5`0PmzDgkwegwG6l|A;X|8yM?|;!k~=zYO^v( zh>*uw$2`N;NVdJwnt3#_aSRiSDdX79q=to9P#bGUYYK8=jq65ajGWWUrA(#$QkVxszRA1^jFw@Z7%=5U&1x%rNAeBUK3uKiekt(wQR%^e?4 z;%<%{f}|K_`oYmrR71E&mHRE_Qq!--W3c!JGRAw?G(8_~);rxIRTP4%ebkOcgY zXA@ZTJT_>T;PDa7NbV%yvN+$|nP}(JeFH>)OkTfq2QidJ5L^>b$C4j~Ezv~xhg_G5Oea69D6hp3`&F=}+0ATj zU}gBxESaq36tiEWK0QBBYFi+$^Od)Jj+NK#VFnI0VU29$J=S#;uHomjM5%PcV)M&# z2ajNb6-QS-=FmN~`sI5y>E8`E8ecQn*}T5=hR>Mgt2L>SUZkP!}4SZSj zYdikp7Jt{03uBV%QWT$v5be`je|Y$A4XHgJ`p|~3>gt$bvLou+ zoNyRYr_#J}oY~j?OS(d~spt$8NwxsVK-0ufwz6XzhlrKXVLEH_0leg7SlJ zr$TVpCI=Wq>c|iQb5h8(9*=qXj7b;6gEfYei36q!7egs)(5eZMaXNwCSC7%d3pVP|*tiA+!K*KasK{wCT?=xE} zqZ^;&zQ6Xhoi+phOyX3Nz)-;A?*Ac$k>zYrXx9%qddJ5p8Ej?0`Z{5KB?HY$z?5SO zxnKevEHdY)<^vdHcf;1s!g>jl=mlf=a4tdU5DWGy|9WaJ=icfkzZ^{dadf&|>9W?K zpxX*TH?NjXAaT4!=pIn@0NK99P4*y74u)i`8;?|wHpn6b8r=~514(J>>h;g`jKCT2 zV{j54P48&m3@tjnbR?(eKc}H%aMurus*{z{OupND+`=x64BnlD>y?Bqi08*u79QLblPeqv#7Qj%Nc5={au-!l@d6L4s03#v1CyjMVhHE&O{#BT-@{OR5g z#MGYXi~R)-Yh*(J{^rPh1DIp+kXa;ai`j$AZRqH**pc7wK0Q=~8x28^Y){c83;uyum-1@<$ z3k%S#gvPnE>P|G)0n%RiXR>zgIv?-;fVY~vtzH6`(}yrm%{HYJ$d4h`Qg7g=D&$O8TpqJ z0!^DdTW?k*wDqxO-dfbg*a`EVgT&6fGP2IV>*3`XXVD~Wq1}&v(%$ox!L~=MrU`Du0t|1D0sw?eOicx1ntO9|fP;Vm!1)7dVPq2={^@mIX9^S844eZoAua+6sSp zCA_q1<`mC{Dpc0p7zX|u0HI=a;ukCNi~e9ih2LnmB)-lcv*ieBdgLKy%M(e8Y!g!x zVi3`;vMlzrF$B-JL)E0Xf#3p~0(tn3ClaZUmaVG040>u*xzUK)K6tlL{-(dX3DmWI70FE<_scXOyP9$M z7=PfS?_z~rLLO^-xX*8ao-plih;-osUdw911K!x6oVy+WCJc;{r#%&uUAjSs{OyaX z_vcd+2xd(S(~CLqMENKvs4FZS!6`x51gKIPsvCSnV0D)C7HHlC@^F8w zjLa!hD#2oyor$pbNWc&%fdn-|-k=8x-%9FW|FH`oMFS9|bt=7!#69lg+5Nfv6}5m` zaaF`aVrf|QPT7|;gYPxn@`zg!NtCryP>;>6MUP0hiInZvd=!iWq%<4M2_^lXvPvjF z$=^JDC;OqpFykd{>kT_d-29D;eZ`+V^pUr)Ma3SG7>X?O=?^tB?)82_KmEn**lvit z-yMZV;0KJXTc4HgDQoZUy6}@=rbm%fMlN8MOGAIy-&chzFo?e>I|r#tY{K%{;kJ zT7K-C2Kp1HPcN)`sYB*h-@uVyg3Y9o5X`_cniF|m&#wlm!7TmE)^*POm4G)NZXe__ zKY>u+5KfcCLhjf7=)~vFd%%|R^a!J+z=m7d(vF#4fDh{jOfrPL4GtsGPsR%mD zWpsthI-0t|I60Ja1Wk)V9~qgyNlfK;fAvH{CzSBP+t%G+NiKUtQfY3H7~hyNtEj=g z?nc6ssa}898c&+tsOGerRU9+Q>^tIPc~m5K>El64n&kV6)fi`QDPx;4D zVh?TA^c9*$P-#b!tm4gqgEl-;^^a!(QR+W~nhDa|xW{VrNUV-YVBF}sK%_I1Pk+E4 zRL97$f!6JN-gLqVpj7&DJp*fuoCGd?{v#TR3jO?_< z5P4q$$yu<)cT?^LC4-{jSDMy$0KUd#_hM0Xk_Cc(F<<5qqy`c!MiT)AH}gM&4w9-x z<2JPB^3WJKkJx^ceKQu+ly8CO-Fk@RIJl26 zCr|c@6{Xs-K>*qv!ohvF)pk!_i(UXs;j}5s>ykutI{Y68h_~HSHWP0n8VmH0{TpZAp&8NaOm|k`0x~}L@w1$j5Jkw^%)SlTf}f-nzu*hSF@q&jIqJV zhp&!O)L9mmg!*m*`q&ugBj}pD0#6EJ&%h<4-1;vG76WD(fwp8vkj`?xMsZB8K~Oz$ zT)Tup9&}lW+?gl&q<4qh+xZWC>M^;5xsNU)W!yVdU!O6Ch?xWJ*U>$wn}^``j=nw0 zND6b}seUtULHsLw{>J9dkCGtRe1X>vb$MP$^x2ZjVE38cPRfYiuWcxDKlF1HM3TI3 zvk#a!T%VH0(;E4xOvo!AK$F_ALpvw?4m@r{@49`P)z};}qkB0uYQF~rWJ7Oo29))}a+YLCbhA=!Zv|Djb9CZY0@M8sv^ zE334iY;t5cCQx5oMaFqZoYWD`mqDvEiQ`03dG)Evm8W|R?pH`Z)zxGdk69&~0ok|9 zTc26b4i)Ew0;Skju)~AXzR`o{TNr>6G(YHU_WKj3LB%@B zi$vz?u{k~?QsNohOrb(b|NeOme$&AR^An^q<}g-KuW4|T-Z(v$1f|#SGhGwypTBa9 z<+1?)rT{@E%_FO>+em!q)#-|8#lL^uYd&3g`e71i*MK*uBU(Z$W)h$MTXm~wyrFmO zUXA}ODg0}B4xfy-@hty@n%f`?0H@+=WO$<-^>LagiL_=1B`w~X;{;t}74hQXP#}(p zTjZamB*9(k8gtmmE4Ug_7@$GP`)-OCQSM`&>NYgO>cv)>*imB#hu%k9Q+{3n@nq*f3O=dB_0pUY*6l>cXZ^hMCF1>$9NU)tPck%UD(9 zPI=$yrG2M!j;Qm92D@namuBD1@)yMG%V=h{0S%1@z)ei{MbU$)d#z{484X6x4|?b= zlJ6Cv`rEOZa+%4uGV=9gN{$yBrk|Raue+cmefw#x>C<(`kwJD%$2(?NUp9a8o+EPo zW#-}z)5=wkePI<&ut&%M$|sw~Pp8-~d01QwZ}szM)J@KV*SY1ZEd*9SFbh7DS!Ry= z^Zve8V6b8mA2|c8{}7ZwM&u)9oUZ>P*>1ep(%B0}RC$#F1TGvvY0gHSz3vV}Cn@=$ zzbBD@8z}yhRE{04DRl#O>hPT9fo`S1mXp?=>atN<8irsFZQsV4tRgXP{Umdc5f!Ax zwNrSc(@XTrdzsaI0BO}p2X!I$yb&O+b0PqgUc+=nvS|^N|%|9=yY9JGSctIWQ-3)B-|K|ik3b;hzz*mo&v(*mWujcI^(6`1IsE)$8kuJD(aR?|ls`Ihx4*(Wo$K zxcm3j?K+RC+dccn$Li9`^Avo{TpAMzyb%I0uc1FfvizvybkI`3wnNS<)PBn8{B0+aC)22@ zz7vY2Gr|z)Zl~qk{2-+JBc$10K2SqT39AuXyEpRS6e%K;a;y&G>yrhp^K$9EeL$BM zfqF91Mt@2q@EI^+e``ap%FA4TZzO#T&7sx_?U=^s>_lJK8 zdD)NVffpkYD~)PQl$yBmsRmmqC6xQ{kg6YU$$Ry#z?idG<#p_C0|JXEii)@???Jgi zRr6p{dg8mn;ts;`{9{9I=dY4RTNRGRrbX(0%8-l>#4N#(lm=o4b1>(+sP)i=vqg@~ zu2hGe+o{7|PoFr1K9vm?OON#kS+_JQLL40{m2f&j*j;Ybs- z3Cp+54sQQv5GE^5%J) zsAd~W!hl3JM4raULVcMfyoafp>OK>JOdeDnznH7*DI0>7Kk`Ka8odinqI4fsW#3>( zkf4X_66oC-F?f!A+~gaPp7DU;d*TO4yx%s6gTraYV=}Rz6zJQ9eMxVdI&z(=ND&>U zW%M#Sb3evX2CP*y+9_XTum8v}&-GeFmy5CpRtS zJF?L(6F+}ObXp3UDd%xT-q+)m`R4t!xC~$mLfaXJiHZ>fwa$a{S4qfW0APRxZH!`&mxm=s>PcoS=H!FRm~I`X?b5%S3~#;ixFb* zWT)LogHdV_<5M=g;f3EIc%|MfK8almQ1YH3Chg5tZgNh zpSZ1S-N+Ste9UJn$?)au#LnNLjP4)eBz7I>3_ZrPTI!_3JUHx$HIlvUo)OZg>uu4e z_34i`QpzRP|Xe-!jDGMt0)b^yg12OQr0-y=?Lc{%j{I#1%WwCcUdY5SNzlCwnKnyFBv*n<~Ccj4+TEK2KCP%JU? zhH(}+UFEG{M)&0Q+BE2G2u5LqDAIFn(NZ2>2Y`L zmM-PxpkolQA96wL!mQu}5!U2IqBgV0epCEghMLdB1$Loben`eBe^||(VQdH0r_9@A zJex3XaGwfD&XZiiY0{F2cZkUAdY0KHvHrSe5m~rHy zNDKE3tMNa5TFII3I=3!Pu5Zk_I`@|n(_(6M_+jsM577GdHi-jG%%1qYi5_CO7(OHHlyWTmz#iHi z>K9DI1LXEWiqXN62179$Np$x1gF%$f%KglFvZcBtl`cMIzKz76*q2B@DE3U!C4v&N-3no$*J2_#TU!0_%WkMUQBk^z1GLD($8IHr4ZA~0(6$bdR zz%bXQW-H^pxQ z8aB(noC@k=T-`m~ajP$13l9a<28?D#O-6lZGF3tOBb+%&3(ECaQgoVEI*aF9<6cOd ziN>j-egY%^irCJ3g1)qKc=Vx6&SNgqT#TcOCNCNhW?@VzXWu0p`3J8A)AR`G5o5M% z(pa{8vMU~)W=U2`h|Wz$)4qdzEmgfrEcc#9=_qh@6|RYGf!I+WCFwr3gtX9WYjzNI zD{jQVo-{CN^hoHDFYSYefJ-DTAH=n+hr~*!;JYTzi82F}pze(=T;f z*3HS8nX%Ld^!%`{3lO<$!?F!YobwqCMIGheD%fsI63?JPaRcTbV@(Y71x<=R(KygF z`!pW?-enI~7r8U(g&bdDrkK=VnU1(NwXbl1@f_5IzeyB>x{->_mznw2N1*7vko8bZ z4q*Ym#&7v6F|DjGwXHcL?`XrOS$Z>|W|(A~Vi~mTj%KUiHO7Q!wu+mEbY#Xi6JBGE z0Acb=zvjbBZed7Q6YC6XE)MpG;5uKYQ}GSPnOAF@$RMr?1Y0ymmAbg&AqiYPmjCL? zG^v?T$ZukwT86D}OQ{deA zn6YMNi^F|m@DJ{=)*@x-C=?o_cA)81|6Vzt1?L#UYbD!~|Ec}m_h9~aH)DN|yTywy z92sE}UrwoeOxol=p=dzSasog49NNY3E#f+JAoD}el-V5Yuj-`LuGl8g0d6yr@;wa%44=)^i#b}JUGyo^Beaca@ z^FEw!KVyvn63zdlk(xpUVK5w7fv1n^0zazGtiT(%x+{?7TW59mS3k_UpBfuOj5n^W4kH2SK4uauC=iZM2UVNPs-OpUz;+V?=kzv z_T>)WIam>EWB`a76C={T>pS2m`VBFtujCbcKyz+Tp9hi2U@vy~ad5SMZd$|)CCT3t zCx)!AU4e#$jGi~=gv7FG-_vlIsT&!6(nyS-81##3iS3s9ko9U6JnDS79Q6=n@U(t@vh|T}?nVk=5*qr+?(VFIoWU*5kwM0uOGO2r?d}yL)fLQlq z@xI)DoM>4xuy^pG8-9$AsC>fD`uag-o3<#+6KdLLez4zl@}l z1Cg96Ywp8>nurQA=>#;tES93Z?{7hoz;Y&6y<_zBSsVrQK zLRLoG{;p4;w`Qq|KH6Pcc>TspVD)(V+eKq^Oqv<_))X%PLPKb7j{X_S3ywfB-YYsc zg&T-O_WCpX6g_Acs@fY6n0#!PhGa<-wck+##?a+lYU*7m!PxUL1d?$HU`%3voM_d-=mXYLSLhX}6Z5Kz4J48dm z>cpZ5so^y)hnItT;|%X2*I?;0<`>xw2kfa){JdXS&Fl)9)QydVy*-d4C7uJd*n&HD z%&M15PNkQ6G=IHg$1TmH^GmCR@hZ^;_Q|=0eMkD>~k7yd&>>#h!68 z6<~k?^*sj+8fJjGipCeVFxtmJBsb*bkuSEDfo;hRkm@6NZBYUJ1&zIWsDqKfQ3GHh zNgt!xfrDzTa>w4S{UI2%<|lC7{;c5~V-XuzM_9x%&8q--ILmSd@MbDF6$I6KgE=b5 z((%vs{`J!GRIotX-Xu^khl=BRR~=sEBYxJFYp{%jWu+H&p*^rS_)Csuc3Q%mSqh;U z)*!&z2?T1JqSL_Z9qW}?jnBfo-Gnc0hNW{t->;=_M(7v~5Lf~;dvROkW|;8*y3TLb z`qE5D+|#Jzm1WY|odvu6C*F1d@E3- z55L37i@4XE4vv`t$`vPH5L8o_s_UHyl;<0yAV=TBP{)t;q6K{qr(@AC4<>l+OT7sQ zANO4m*Vl_Q!pY9JUg#TBk7r_d3&vbmL&~jTEtG5T{>|1!W_MUb@A^*9_va2b*NLj9;MdPw zYsBPd)4zjL12mvutGH6iHZ@cYkT1xQM?3&{QM90ZCi~W~Go$MaUf+Gfjrb#qSr7b0 z_ghnSnoyU;MtX02*H+NA>A@e)HW-t>nUY0TqcW20=!RU38!md3afmRiu1Sr?ZuNDK z$WR+;Qn=7Qv})iOMV0W>OY4{CcO^>s!6HOACRh%OdBETCQs z>&m#mbcKTQbK;#b(E3|40j0dN#+;UZhe$FWyez7N{b|NGXipQ8o#4)Z)Ia{7no2vb zr6yZru6LT8zRGXjr^HewhO*K-ZvyXNMRDagX@@d^Yi2aazCSfy&mmF>9s4`vjHcES zikYUlnDq}@wO^o^+VB#5jpP`M8)a`NATsBlI7F$@iIy?Bv6>B=(%0P6G9>d|363;4!UX4El*W@0{W~OS#dT`B#hq)+R-}X2CmZsj zF{b}OidS(MR`Qt{hs<=v8$(a5^LO)isABHM6*<~G@ZO4zQt9~8U zm>~D%R^MCeLs5R!GO}_1hpF#?YAXA_b_Peru|#DQkP@+B1%aVMqN1W$qB4REC8MFJ z5D}3kNuCTUA|)VAq(nqPMTjV%ASNo9AT20WT7UpSLJJ|J=Y2Oi^ZWkmt`$Kbi^aM3 zoW1wi=f3#`gRxIZgFkJv8)vNCE&tHk|9Up-u|@@hDrLkJLQBiI!|md_=lp#S)U}bw z4*ue=VM81$(9-H#xYq{G6e7aAv>fbZ^iu?U%PHt00@?q9--Gr(`$Rvq4exHz@d2BF zc{|?9KyUJXVTUdHB6WhLY^w@P(aE=a5!& z+Yiu-7@9HqcKm37JbR(ZwU-jzEa0uU<~q5V{e}qe2)viA60~4?Zio6CJ9t)(QKm>b z{f^|K)k~1IHzlSlkb*=nlt+}w@@Q)pCuJJo%C57yZWWM=`P}(LESx%akYTu}N_T9x_{y_XPyvV> ze|M9D#9Rw=6m6r-44FTxm$A@8{p(8kXX{0~WAu`OCSJ=6Uc7D@JX14xVA)(bzWtY7 zKW}7-$2viOrV#0bso0G>yi|4_MK>MV-}W?TBIas)!F+~RQc$eJ(p#%&w1K>7gNwC} z7+aiq$5}#JAy$442fvCVqiD}pYgh)3HJq+%k2c&1Ox8TB8CO12A7VIWfXStGxOQ>A zx7?LJcEXWmB`z`<$mgC;`(#F&KN_;9>#?Cm|FNNb%(LR5PCj)lMXP~95x+-wVpUwU zRkzvBjSDx@TY-u};dc*IZk-&KP`H6AoS{C-?sfQtz5__=LFM3Dn;*Ichw#om89)YP zBoV%=`qvHeRt(B?Mm0tkZsAc?JhmP%4(bRDTmB#+I&`|WSqz^ohsoc*8W{b3k`Ajl z$-m#~?-A&$$W(Rv z<~>tga^ATUQPn1Nh=qQ&^{Fr4KvVqLDK7h*zwCrzfs`?4pRuW`t|fZzOhCj~3X6xJ zm6m>{+tp7FZE!^NNW{s9#N1sp(}29S(C`td)O?MiFfqZ-NjQPFGucJsV&4>e`DD_C zB<^sByIk>?{w554%eVCsB5i3;?L)8p_Mj#yCk3O^vJHEDz&uCrHXZG#8OAf>qM-_IWv^Z`%P&T1e}Bu z+c)8g`0g*6kNF=FUchl`hZa+qnh5W@FxBo~_bCmXk&G;@A?1E3z3g1}MiXmo@! zlZ$xilZzHgl2vKCrx+Cfc)?9;m$y(hCRIgFe5=8PUgXe$#Oa?9#Qb~Y zVRoD>N|vvLsn5`ih#K<)Iq0Mom-PSk&-V?b+DLmYCJ9|TC~lAnY|@|qwU)A&gw7Nh zN5GdK(xEeiqDDB(+;%j+sh{2^c}Rn1i2It*iuCGA_iF0yix>CC>Jc9eD=-PvT;d*< zxVW3?_=IBP70#eE2>m^r>coub7{n*B)VYAN7U}g-9a*MLH=W#)S3J~OIF2L^)iCuv zbg6b6%M*q|UG%2m@G%`W9S6i8wJ(L@RtwZTgFP% zteV&9^VC>A@3i2g?LI@i?UpM8!Mm?HFh_XN%H!%YPu2dGmb1hzNbDGoRbi66MUj}A`766} znRI3@0im!aSv*_kT6juRIm-WRg4%R_`SoXvSL8%&CKnkQp2!Zx?HuaC5>6N{QWSV{ zYPi>uVoQl%EK%`fO4AVU4Z|@^pHjieW@eE4Liweqz#HKX%fAuSVGpPhE|5h@)&m5J zrIZno&U*%a!LX_@3CUcSgKKQfqE2$~UW`#}H8ETUq zs>&RNx2h|?Tr4>B`a-bgJPj*|W84d4L$JdGDccMZc zol^cckDAoXVZYyESr8rE;LRN@TwtJBRsJknG|)mrUDRC;X~CNm&c9AhvHU#U_SWUd!Nb zh^f7$#n^*I*`(cyA+N<+&x4Wf5`MA{WtFLK`FDs9VN&PK&w==G;8Ycv~5E#)asEg@yp(R*Rm2duA3_f{>8u0sb_aT06^Sdk>;mgUZ89T~mQUy`3K<%?H^@@d4~iY{w-8+95z zm5Lj_2%2blxj{m}rErGr12eBhviq0~%}#yYbo@7lq4Y6@!_0wS0eu zm=Vx^Z02*=(lIRuIQ2_)BCSFkRS}0lZj^uS0QxeL@2XB@Qmad=5LfI52AAl~mF6$| z7Waj=wljR5DWqFSYgjMDGoNpa(!fc5&&-W&o=RI-o-V#JFsr9)YP@UFA_%p657XuO z!s9xa$9T@4*fwynsuL!$B3Ose>WEJU^rvqvz4VRIqsu(;wRp^1MqxseZ|QTvKfB2` z-h>`TrtAf}VaT;7htWylYj1pye}jUn%ds2j zeV3iT;|DQiaIfUjbp+O){5O zYkdciKBD-_h*^+w{u4&irZKc?8k$ci-VSdveAns1L*VY5zvrrj)LzJzAJ*RFop@3C z6TYncWVU5QXSNc1 zMfkE+EG|QL8OH^}bM|EFviZ6efFD^m6z2N)fVcX8g+y5smS3@+@z)*Cg)j7UEz!Y! zaG>Yn@GVgjn4N>2;(2w{Mx|7*a=ZL+%iBA8g=THPG(`R80p`;ds@r0cOcnKo3Go$K zS_6B;QH2S3Tz)<_yraFQIc^bph0WM13^9uP^KM_&E<~DeX*LAVC|cCyWQV zA?YjErEdiiZH~g%ki4%SF_)&DZtaD;VoTp%$Pu%x5Vj7p*GB&-u4!uE|)hM_DjJ3Aagc)zD)bfq3qdu7*8tl-+DT zN}1V?VT+T8^BnuMYF#kUDHjgA@5;BhtEppa+58?%x4tys*)slM5qLrc<6Q?03P(V`3Y@oIv}Yi#=NN#j!3MY%A^wy>B3w+s4&an2hbX|J$`3SImMW2l4F2 zbsV4>I$0cgR}({u_j~itBNVB$^BASPjluDN85NWojm7I_k^cr zz3;qyTWju%Au5v7)Wg7rD!ysxP|=D`S`!sb^_z(Ad73lIPbhUGFkfeg&pN5Ef~rgG zjNd~7iDtlMMS|$a6dgqrN-`uNmICZ3Wu@(Ri8@1O0NBHiR;a+I6Wg4k3i~FNJoM63 zBATl{qWrEh>QE9!lhYeD8+A%vG2ZxHFobhQQ-*;Wy-C6qlXA94%QgTx(|VD|yNxR5 zDUkPt2a0>k8wHj?wxVuj4}bkBle`($I&?`5d9#*+{0WJE{Rl-38?h zy~`A|)RFbNt~75aqbukjNT^x3AWt+!~qT#OlEw#MRauabP zY^gxpofp$sp*YSCm+oUgE_=#&D@Xuq{)_pGK0}4S+%wrTbpK1Kd5>+u@4*n*F_%+B# z;VMWXQK#IFC{~C0RgK?uO!CXg(>ByE_3}4z$#<=>ABcx{pdAhLO4NnsQ#@5tC^b^G zLCqwFnWOtqu7fJ^>C?+Qk=OmB)SQ6G-4n6?2bJVh*V(_<{X{sFvtgQzs9pabi8ND{ z|Ch>(hxQr>E}V7)IP_mJ;c!2CMB(0#9#!z}ZW&Po_oK56xeCD)8!edfNfR0Wy$l}$ zR~As{u=mug=a%`TDxCjS%t0Mlm2yv~1cM%X$5p)K&&3+q9mIBh(?C_t@9(=1qpLG( zJg%EWdi=&Z+NNTxQD6@0iC*ME_i(Tk?jJ@1XB%(?pP+)#{E6+Rw^r#pCa~{$x(Lg{ z>=N1HE-h?iKoW;}dght?DtdRt=!cs&4~;<&6doHOTkHc-A3BcJ8NB5A(AakD-MQ^W zYP*-8t3Rjq8~*Tk_ZUKZ-P)K{nH%ZjS~aUYfxSZm2c{K9(#4LhrX=Aqs*=1hz~Jz> z_;2~_9OjeOR_nRLdV323yUWqzAE?CZtSH3XlW7YY&A)oIKvtwkJLtC9C=tO>cHqVypdj01c?} z7XfHcses(4oLwhXsNPp$ZNK4rO7C548uK7m#SKAAK_w_O0(=+P*_Uo-Oz=JJtFRw& zv2#>GJ@CI%*ONhCQ-%Lj&8@Hw_VBSJ>)(Z{-2k9qm7(f~TSE#r2_6L(fL!2w@qO?{ z9_wu}`u!!KSt-Edaa#xqPI-Kze^)qoSdN9o@wdwJIIg5%Ip{1LU`|iRlb1s6mK7}? zzUZV=I&<-U&mwe4lllA^(94RE$X}cNgdYw+gU$dKFrC0=UKmKrnXvqQ z7s2$Pt-p@>xNe%(!|LCb+wHl@GA?TKbgCQ7cgS(THq>vPvKb3J&}F@R&I&v?oqakk z++3MWMiZ^{WlxPZdBd@wFCsqU@T+E#jzba;%T6etiPrr>4cd;(-Io(oWqs3vXs|h` zmd>Dp2Yk&=A}1r{jKAiZY_0~&6EGeusGVtCx;57Ed^Lcbn#B9d&w~LXTMjQnEDn~R zx~O|axPL2szOWQ=3xUvE{AQdIq)ktxOU*-vjL~o|V%M7O<0oe{V~eSPOt#8XWP#Ng z+1zUC=<7BM*UYP}t20#S;fnb%$OjNmrOAgtW5ZGc-_1~U6uwF6qiLh5slg!j zU9!LXBU;;mNkWH0{ZSeGer&hzUC&E_SK-|*uUqBneN7$gy1VE+i8QYF4d}i2^I&*4 zn`edV=<50|-}bab_qE@{HOGed>^sw3Q{tQ$L=V60@Apio8ZZLhH6=yR@L)a}M| zq3#|}Xs)x1VcB1ufDU=m`MS(?y>3ZX^#bdy%YQy@XPw)-wkPTn?vk$85wAbWerdPr z4qy2$=Ba%aVwB(BntL*rZ=YEXkBz-KWqXDfUWAyelspg8)ylIZA9cshY1+y!IG!gE z{ag3t3^*`q`o*b3)ZF>h`SU2!B%rfj8`ls!)a^LVYmt%NbDvHZcR#5}j--_pCM-ui z%U567X=Br7{n#}UpLWLZ#H)m(z)Qntsy3f`Et3f(gp`W7z{XmH(rbyAz{8=V67~3p z1Iv#mp~wz^^e+^!tPNQdJE(dMVe}HhjRlw@8?=`|{#V64Q=SrWpN3u^HXwOdeqyUC z;TQMQGlP9qnnLG4{>w*K@>CMh|Fok2eUK*PzV^Kf!AU~V_1!878T2XRMQW@g9bF{R zaP=M(Nc0i#9g#7IIACiywU!qFr;0G&Ux0}Dr{(qlk$mK8&qd{DWUysbvvYCxCwZrT zr*&?S7E+G_wNakSmW_lX#rJoztXy$euBm z>IutI>m=t@>R&KI@SprvL}*(=u_rF%LqT^tAIB9Z#3hF)R@I=Yl;)_aHiPjbT)r1S z-%CbCIC~I zox^hO2Ob$8f0rdYaZ~@#9QJ7Qp65|k*>YZ8$Y`CH?q*koN~u@J>Ks`%n_^6!^*|H7gfCCu1~NXAtE7J> zVtm{`I#Qzf?$l6onxY6-k$A+mzKH>dLb>YNJ^t3s=?U$Vsm>3kyPjfXdGQqwz3?o> zePdSmY`_MJ>BV?fAI_ zjGi`a#98#1<}WY!A}lXb%=&t+VFzg=(JO-11w1ZNM|jE{bVIh#K2mG9Mm8d)G(X18Hh>4TJLrT%vpz=sXMq2l*T=K&=wy0xdDKBCZ>*2}Ag8fDD? z`=ZM><|hJ2i$Ezn2*LH{v=lixVIiU;H_@=TjAbA#$EQK2Eq!H9**+Wh4w zxJkoV4IilfSxr)6SZmE9Z0eXclEP>+Hs!1@oGu%54%<;&bta&0)8u(u5}3;~=Jf3# zX$bGOla-T(HdzTs?R{81I{xg?VfkcqCq1aeaWwpiLv2QkQOI&$an(9;Ik{^nrbf`D zWgQ=w%@`-(PVGo4PFVWfBF4;7%)PWA{huhCkUjSoE(}Qj=@)j&HKUk$M&82X7^e|` zU~uYkm~DB#s8aKG=-68NDNV(JPSWuX@$95}sQ3|7XSFU|9CQS16iIi>&52i}TlvuV z?B}$yJ;(GOT*;n4l}YH9KC@$zk;L0*{^a({ZQ!FIuLFA{KeP0!)L6yTUn+BF8=uhyKU`-jqfxnUKddiS+W)}t0JRmt zz@Uiu*Vwqb1bEdrYqPAA%`0GIL)94u2YXf-Ywk-!ujPKMhU#U7su#nOpSb%+7Y1(* z|DM?$hh&Bw4L$a7HKJlIop-xRneO=Mr%z_0`*^}|KhzsocOf=+8u}|Fujpu6q;adC z)SECqa}K0v_wp2lsnL<}Bqg)scPzHPw7p+Ebk>ezb%1a|4S@xJ(wUE=8guIi;rF9G z2rYYVBE6*#_E7=D`oa)1_G`K&P)qn*lR3x_h1CF9^UFVKs&8bGbYfP$k%(KcwqG;L zZ7(j@TcP&H^5_Lx-OF`z!Sy0pI$M5Pux@nsgC*jwzCyk6&m}=Et(Ju4-HcAl$*PEj zlogumLO3<86hla#a`z6=;25xZCt!NSU27>p?_G~AwkCmbpc;OwMPi84oV6~RG<<@4 z-?#(x50Sg}(1Buz{S+?X151J8)-M(D+TBYb`BiX<5_)KZ89?#lt4z+<06s?`Xkq1P z8_aIB){o@AHZ-nZTlw~ zr5YY2)yb%Q*{f*2;?$28$Sk0qhnASXx;-uaR>WbxQtU!K!UeV;Wlmcqkf(gb8(vat3ypKppxat^fj;5) zkv?=-?*o9pjI@*`;%fY>T>*6Z-3s&B-42)d=%h8t7Czfdg zr;_GkOXj5x2ve_eXJ4fK`SI-;m>$x%!iw0%Zf6S-5oOj|F{X#-Hp%NniwbvAP(2li z#X*l*oH&h8_m50AC)fZgMrAH`%a8rv7m1lfbY(gq19DyZ5o7m$?O!8G zotX_3fvS!mSZwdIq~r{1b{B!d2*cGARfCcx21WcQ(OD1m@ro_^8%x+>&Z0^$ zNqeHrpUfzuph&>;E|@T>HEuO zQM;eA|FpR^W>90euWy-#KpgBj$9KgKYGbj|JvU2;0~=i^iBWxLR#mKcgfr16j92*U zUg49CC5&=JU3)$fY*?JCTa4T5`Xxi!ZDk~P=xP_wwiV&t9e~EZLSpd=P3@}{$?f7q zguVCic1`H;@Yq*B&WA!T*#%wZ^=4l_&}&Mg;t#tqp93*^HC^28PnZyXvKrftKlfGK zepC+Z>Bb_Y;Jw!)+x~y_ziw_ipz7nuP~Q#h7fMoplysFE=hwlGfG_<`%T^`!J1X>@uCkxs z6R|jgWV$#OA{n;u0-pxYw7W zD#pA0B=eej#1q|ybI+s7N^1>6LOw?YY;e{@CbCbDpWF+CK!b3hqzFy0TEof1^iuYa)60a0^&C;F*A1n4# zW{&EasOq&LIPu7mC>z(Q&F~eYPx8pWn>|fb(ML|N{@%g+H#Mg~Z5{@a&Zud2gzrDe znd)TLWF5u$jRa?(ebn75&^ax zhr7WumR(X_*ZC8=R|MT!w&+yG z)f|n#Uh>{MQoe*IJ}R|oN4ZkQ-5=N?;juGw^raBNfpMRlHlbrTKF*RI)VZ83C_SrA zrtJk?`peCQZ(Uxb_=i-nGvApUS7-ihJ^J^ArCY$SEB_Gxv$17nrV!b^0*~2($2D_W zLme}&rgpvYj}?pm8RckIa_Dun&l#2$oA^(2f$^fO@K|GIlbzB7X&cTcT&5k|$LHIV zU3(H6NUaB&e~Q{^RisYsZmnRofty`UVzmiODwcD`QP0zxK~=7O(=aaSd==U-*Z$ed zv)dd6?8B!BRO>5q#jLlrhM_}&kTM#2b9^lrAOfQWe$|>P4bC?g%@GdJhgbD)m zhd_$uPKN^Zgv_6EQkpdF{NAalPUcQqS&FHwo(NkOd*#a6Ww&^nd2luG{HPRJZpSo$ zaw5kA{jj-~N6){eW7WJ0kk?^fg}MEPcl+$N<%gp|-D1U{I8~RL zPz`B)u7lyM%MB_+vHED!Gjz^Y<`-eQM^9?Y;B)0{b+Ik{k;<8j-ic=#LtmwF+(wtq z6am#_%V#R>NnB7-Xl3xJw86vnVAPBXs4u&+>b!$~X##Z_o>LC)gT7k3FQZ~#B#r+| z=2akh5}k(}=ye9&<82jJfk2rI$hWIPBBzj%dJ`MFbRamCX5pG?>J)M{=S4!J+`d9_tk?V7j0 z#VeEd)OE!VeEcW7O2-gPtc>ypb=af_oXs(nU~XZF{e&KpKmC&8$4&~ey2$K0t#k1* zr@@u7YQ4puL~RPnKvP3@p8a%Lh?vouSV0OkQ(7w%u>lDVhj!GjrCi1Lh@PsG)gHhr zELP*fb0P2ALOi(p2c?U~^Tr&?0QMtkQ!Z2adYZ~kZ3=DDTONzf?fjn2+2O{|aNiL* zaCMm&e%Re(+ZklB^(p8;%UuE(1!t`R$Z~1D)_Eq-Xa#U61 z&G5O!uK7QBI>sN7yUY!mdy>amCWO)dhq{@M9?ep~ozKvgC9hs6dv7`ZE9H&=f2guaKk4m zG>JdpOvU3K7Y5?bJCuDy0#o_&L-j2O5B_oqwXWx9?k@{gh*usYJa%{z zZ-dg+FkGtdeMk@8zp%`Jc>F;71K@@hwz#f6 zlS!rd6Xw=UjEjXgmb!N*MmKHly*5`94l;Sg=TmIdcyJ;bOjZ?oO4@{631Fg0Nj%TCD8QrjVRs(Ox)#04cZZcdt|y z^i}nz^gC39U4^+yjY{yC3Y9wpsj>nuZkv@i2{O1(Ssf~0_i3mEr%02>X@@>keX2^} zPReibR!wm~`ggjWXMgxIn!)r4^;_mS#(>#Bc2yn3m>an;oNTw9hgqS$^+!Nek;VAc zp7&~$24BrpiFW^b15KJ@Q6}T}@;hECwMu_31dg7N109rpYte+ruQyBGUokCw+ozbm z>b@|*+2v`ldWe83O;jT?oN*so4T*af@h2EA+I9g6IAx$4{_~lBFjbZ8zzCDiJmab9 z@fZ{^PC^~$u*6}nY!uf9o?v?Jwk5|d#@Eq|yvtevRQBjpLJmO8JwGLJmHkRIf_>#TtxwBRn~-kwY(kTIjxfZll8a zY;*~5ieH}mM$x>^pL{tF6u&wH*=^%1PvNGaqBm{?e(^k`Fq>&uaNPrLn3$wo9qSN~ zs}r^5dj3U5yKeZwrFqN0f?UU<5T9KRs3ou3iy~v-jU$Xs(i?Ht9`y~%WB=F8`7+c~ z0FAOIDFC+*OH%#=);0HHdFxng;WHq(ZG^$xpqgO&s1_SIx$IU@R2hH>Rc44NKYoT4 zCGh`o`n6!#YnH0UjR7eDNVIr43^!`LQNYtG;chc*HzT?8pKM2zXm(#a-5k5kY%M&Ac?c+9H#!>oBI1=jhS)rHRAeh^jJ-BS$CZQ z1Ebr`pmt($fw!TWPego z1?ndtye%LO4k}DIx>EI)CdQiquc!N@FVvvqG-iyR?zbFuORfLQT;f`@ zj*Sl5q^k|s;=A`%%J=60^ei!)E|n-^5I${{NN}5GA>7ZbTgPyCJKiBd5WUCtq}B=* zmUj59Y2d228g;%f4+E-YU_U>qBqXFfM1J-LY9aE&n#|Bd3hBMzU7|FUpXFpY*%B5n zo_UV0KTwpw=~REQ7OB&n=q4ZBGv1A5STQLUSL<6Ic?LyU8ZwHKen^2_9Q4@915z#C}*>Sb`ltUT#TK?7c|9J;3#eVai*xo)R6$?vYdQG+f=s z9ols;=C01DzW3o59;++YBy3GaCM~>t|KT*Xi|&Q}W9GNSS72iKVQl%A8PR88g;O?mlk`bG2Kh z{~Co6S;=q{eA&>~&V+MndNHxB3B4IoTEhOlXFj=oo^KYUDt5x3(=WNqq9qhCOAyA; zXvO{x=~|r3a+8OMSrJ~h(Q)VmTX4%$9KAFXHL8~`O&enUSlXE1A$^PYcQtg*zZJg} zr@Y)XeV8A{e--q~hcD8OJO-VVM@UyS|Aygr7Tf1=KiX}Adss;8B_FXLvGAyP3B-4k zvG+~SH7Y+`F;@B*{lP(YONobZz6y$brdjb7gA`Um;RedFe@F)j!|sI(HDCN`B#^t;NkI%&O6ou zMa`=_yubJ(SubicMB1oe^b(5j29&)&Wbn;BA1V6Eu(hLW%7o}hBs_c~Bc3H-g>$I_ zX5}@jCAn#Cp>P$Hy>fD?pU)k|R|-ez4F%%%;SVVdVRw1Z>E>_2etmCD8{~n?46_H6 z99l+|V&>9C5O8F3)We;F1aAmYd?d@3H+~`gD|^D&Z=Wsi?Ta#`e)G|JOId?;QrV_# z^2Bsr+WBBVPtPV(S(aiX{+!=i*Yx?Cn#xZ~U&vbhPQ`UWvckU16hHN>sL0J1dPxVr z&@)l}7gD&DrRrU|yT7DgLcO5JxD+(ygoKzkOa#t@UnfWC<<^Zra5t;oRrg@`s%FP| zQA>SU<;#*1-%Lf5^74VQm;Kuh%LWH~y&?K5#R##<7R?j%*Eq`TMGy}9rr4nQSLgbE zj~H=kid|TG;~-z&MDqC?HY`xoJ)#Y|r6H4W#_!=;`Eu6$GqHPT&)Rn*m)}|P-^GJ<~fEo-}^ z%e64Qm>g2YT8%_;1KJVq9sBJGyR`iD>`MHLrWC=jtJKd(<^nec!}0vxji=xVtYQ~~ z@H}rjf%(y~;A+(e$8=ukGFNfQQHciB94!BhVv<`4lWYBugA_k!b)F0Z=g_CH^M z+STIcau!np%LDn2d{@4vMY$NRgFYqPrjvUssjx2NIzkG1X7-61g zvz0neU0PoWvFWl0-jo&LGqM&Jxb8Ttf$Wc+e)9nNHMMbn;v*~fPSml*CPo$`g-Kb8 zrGq@ixuSDHeOh?gK$Po0F(yuFzMftYcQ=#-k3|P=yHfAxL8w19nz|De{A{~xX8O#* z;J0({Invrt{pyav8v{}A&JvSCB3!N2!7z_FwZoOb#dv;FTO=4AB>BLNdl;#Qkh7_8 zPl>8z$Kg4L`n%#bSHkd~lC-MekA)9ax99{lX8{1N>T%k3S@DbVZ$mm}bPGjDrEp(l1cWx*y zT9?0dQZpr@gKHHsqn(f9ClB8B@2^7r0$+d!3*lyVL|`SN#jh6zr`T9Vfg51t;yja+ zAn)UPv*De}ElO2%P(vGu8$*+A5P!(ZbLQMBoHl;x2yz6OeFIc+3~60{!WJcJ(wEN- z-DOb^k3xKn?ps4-2hB0Hdsj_HAF!pmg1vg=dK3D2IW96r9sNT zZQZ{L5Iv3N$_J>CmYc)BL=Is*tq>&s6Hccg>P70F#mUGI>IN|+@#e2+rVD|2w?XR< zzIGUXYH?+K5PnYa8%nTlS7U@B?Xsu(ra$Z`SXLs=i;j+;TZu@aF=;j9JM8ZHLX! zfC-|idZtM!9Jw_uwV1b*wDqaoty}0w=sZM+Z8r>?_zk(UtJq%KLh9iBSn-s)^$Nw@ z9t}#6$dsR~ZoLR8d&M@dQM0e1$Q(yKGPG1*VRe6eMX{dpE1KdohQV`NHBrcpoiwTI znoY91({7n{kEW_}qLguT0>D7Douo``Qtg;6%7M+lL;tPS&>FDx>BbG7>rm^DF)T>K)AWl& z%G=^BBK%E}FLIq@A#d496@DbNw)GteVmgzgKd#gl5MXyvlg#pBD84My5B%m-(<(DaieGyw?sU!YY}-POdZ&ORczO(Y%}1$e;zpWW;vtR zkkc59m}9Zg8Jha~^Wgb~t`(=pk7g(MaL?%PLn8#WJ|*Hr14l(byQQvpBJ6EEq}6l- zy4!;MC)M7v@j%}#C-0OLzmApWY1Y^^xW8}Z>-N;;p++R@UroJI%O^N>ETZ$uXd!Rk z9z-p}sId{|+k`*$h>5%i@`jzmQz4BD9U2r2RqV`J8TwKTv z@-sh~YenRBr0y+~TeD7Zu>9>bq-p0Jhkw}spt{=4_K4- z{osL}tq_+g3tP0k_c#19A&8+R9NZr(H+C6(t-)CH5$PwNl(bxYny*cDb0mL6{#c`M z_d=(Gwr7tN5I^5cV)+1wMRMg6!U2%uiYTWvd#NCfmT(q;`}*kAFPl&9l_rB@jFff` zQ8@v>gD_@5sbKX=)fJ=ng6|s=)y?YB|9^=e?XL5Pt0L9XW)WqVr7g4M|5mHf$=1MB zXih-M3~sjJdN-kCjpNO=M7m%77agnrTQBj%UgzaR!HN0W zFmP?n^KTh!X@~HRaxmlBcD1k55peL%x+_P65ob>{6I*h{xyz*J)YEN#t7gC6(z!cX zw9M4V_>sDA(bVPR+ca-ou75CTH~hdm)}&k42D{F5Gfgq{#+Q5R#t!ARee&WePSr7K zW*p%VA)-V0^(NVV=GL?>Kkeut*ly+hEu!r~4CDN(EH!j|ugBxnh zYi#*=GuM-gf<3@}?HR1f)Oz)}kZrg=WcAFJh6?di)Ja0P3xV;?&p36cCJe#0rVeax zC0>VUFOPndRUZ9;wjAA`Og1aMWOO+z$aR)pXgo4?AJM#MSa0^&YDm|wK+Ll<%S{=g zeqYAK8?<~-R2yDLne8F`bi%Sfd|vU<>`^udb*GsbOO@*Li|b%rk|79ud*CP(hrUg} zrS)Ic^^!^GCXYyE@|R!39^XxiCte6gN3^i_0QkyGU%#JK0M*iZqDLGOy-D-?cCljxCZxNZ##)`$(Ck-S#t zr*U;9srwgyHb!ky%m%c-s*r_IQtSV`Y3jLT&Fx}h&y=DYSqIl9@Vkrr6Wh= z#gSO5xG{$?9=9rjCqnbTX|jbUs*Jq<3R}KuBi(c$q(nS*KIi2UaXfUo*01%?+ouDP zjutKb{U?gk2@~2D*&uh_?zS9tr0K}ZqwLgj^RTm1wJ{W$H9M|;;m9onV0Jf7qD=7a z>zAy;#>cX(@XU8ZQQ3|;K|#H7gefG+$JwSt*CdrAUX8Mw$%n*AgLa7LvfooGLY!_@ z&b{&V-gN+pD~s@uxx94~NtJ2l-0c|c_*k+X*Q!}7gpapnl2ifjr4t&}96TC|{R_7f zq@#pR#zI+*3S29Gd;69017Y*f0<;7>w3xHJq2{u_f`QFm&58?JG&w{z^ZnCUMTkFQ zV^$9uB^9m)P)fCm*~Yg)Fyn1^B3LKnv8da0mTtbB;|HHmA-1>I>d`F9;xtIl?}5As zMEA`!f(U(+9cE)mi4>W#MWjx*J*}VY3~)L4B!h+)Dn11sAwn{1(s4`GceaMfl{XQP zIqat(9UivBz+~j>D%i~TGCWtzW+zz+5Z*^4ItG&)-70aQdd=^nh*VAF@9v&1Lyt?EY!-HFx+f5G#ba_$5jMESgP zWY-q56jm4|eryqinQ>Z^paWV4bT@D_OJSSpmuZfl?;{N0qq?n6_*VkBXzFn$pg{*O=b zWbP`86*@|G9K9qzT-~b*anSOO<3z|-P_O#71l!Ll{&i-_EyJw_^-%pZdtA+{6s}#` z@>XFMng-dDgU+4Rw~rwe!X_xb((ME5u9W+B9V?7;mrsX&Uq8yIq8}CyBtMQupmBDM zK{WB%PoiI;DL)NiD=m4X%7rlR!0t694z(h-)|fk+GCYQ`ouB~RlXqy}M~RHnWfj*m zOuEN^-68c*!}D`u2(eYce(bgkah>GKSrhF3i`mPLea!p4yX3|l3#XufBHGr(Ag^6e z?4wygKtg|lJC(v{778)U|H;*9?4v5=)_8zj3TH(U&&P3 zLcL2^dqmTIaA88`{04x(ngEh2U-l6x;?ReTt3RGGPQa>&l=TvZXS(WS^F*4&BYZyz zUFiS~eN}<1*CIu+IIicU++5)ZHic@viiq)%ID*Aod3ea!05|as{jG5F^!M!|3POq{ zsIX|;_lhlWSL*Z6WyrCD?}ee^1^7p`mQZ5p*WyhI;ro;dTo-wWJcMX=06WgG;-{?R za)naPp`!!770rj?*dat8h>JXYM0Rw7&VcLOIB0gB|CvNOyo^3iA@PNJjXB~OFp0~2 z`N2v&MX?x07Q8DY?y`j(@H5)t=&IyihMKnpyA~$g9V{H4%i{S>{1BAtkm8<^_##Jv! z8$Hb5bo7^^-+y29372z{?HyWS2)iq0!Z^eic$*bZf_G z+#$Wo%d5B3UVMyUMl<1+``!L-6qbm4W>93wGqtNX$?+jDc_#UrSN4*dRhiP53=;{S zDpN9Vh3#++v(thA0#}|@zK6=7Gk$J#n?@5y*9a7X zgwbvAaPvFFQ4$A1pL|zira%OL^eYizJX@K_n7R$L7ZrIq=gh)}%yuJRjD;S-nM_U*6Ejydd!n2dE0HH$O5}>PPQ=Sn@4nTL@v?Qe&^5+T^c`Ia!~QPetS14JWS? zCF=;X6c=8agZ#%FGe0T7B}AYwL-!;NLuuwy70S<=^qJa7vc33#Tx@5VW;A6TXb?Eg zYxM#RR2FftXAs>B#RK>ffaF1le%W=*&l4}xScQr#MYQazU~o8JI5bB1j`kgtA^A4= zYTjWG?5>h$O|qD6vEIgh2mOJ|#yma-8f&5axqxfkwh`Hk z3=y^qab(9BLZN;&Pl&5pK6LD^kR+m6pc}w=7mx^ktC2mE)htJG@=T37&b*Px^~uu6 z?DUVsN^`9?lcNvC+2j&DkaHJ-jA5s|4WWHHF#4s@ikFG(w~Z1p8T+PO@m)c zPGu?nUew4P?l%0w{1;nKyENp3W=dsm+>{(9Xc46-Si8G8E0|V!MI+t5&)qwxoUwaP zT6w0%RWQyB9tiVss$0SsO{fhq>WT@*UbhlTp!30uxO#JLRsKXr6?wu^P0sn1){EW{ zclqE`o=4k+o@~B$rqRt}KWM_Q;}?wAyY^a*OhDCiol-ixfp(3t5zPMQpW!g16skQ| zhxBxzV|c77dIxnHSTLZ&xf)7cABw#mQp1+oAJ%wiJOTOJHt?i@wF>%F> z?CUA+Gy}57FEyWL^daU&3)GIXlw0p;UCq-DAx;r55NikMrE;ZsjkB^n!8-}UDicK& zj(1jW&3(z%$XeZ$WM#H}k^E$zVeM;&xnG_8s+c$Mf@lIs=__uHT5+=eo(h?c1gAU8bN8xd4WgyAdC0 zyguTw)9$9***ALZjJ!#@0sGd*KV7coORCkbdQ;Am&9RcWD=KVHD$6NXQJdVNmQ}l)M$(=~W019$*dhZD-J02 z^DbNYDMe8~&OlAJjqFCY{gMnF*(TjZVYNk8MPV@#?PPPVlCwZ*{=X5s@Tn%Y<84Zw zCV;q7O|0n_l7u8u5_H-0O$ZVvDk-i}^!X3oLMsMRG?Tx}5E8%A7HroJnT`^R>g=<~ zBHXX_8o&lXs7GhRAG)DKd53Fgf0kjb`a{{MdVkoMAtC>fr^G8Zz;B|8{gGHc+4OUa zkacSwZd+=AZ|Eb!VX9(H@Sw}x(Ov+PwPrfbRJt-1h3vl%HYHyQT(iDW|I!a@ZC`w2 zkbJP!*u}n1^7v`^s)>v?8x0~%kX0lEooL3yL+dLHFh>NXx~jC%SeK#1vY+J<0*_K? z=m688DfEr^^r@yOH#wI&nY!eCk+jG5alo5*WWs>9+qyJLZCC}3c17^RoH$9)1c}h* zY!b2DPQyHL%c{1gcyu|*-bn4PnA#K7=4^B?z+0kS(o}h6c}%X4++A&mRNW$KM&(Q- zi0c6Wlw{cc%={v~1GvO}Gjf_lU)2E0upB|IM*PC59?h7!U|ZBp?BrEm7=+^Wv^3~F z{3y}Rum{8WO)1WdRl?fV`k7+1&E~V~##|P9+7lGi9p6n^O((%lQ+)e+w5QLC>jrx4 zJ7~!pqptmp8ZO_jNuFnNYh226!O6-8AsIVO=O0b6hFQ=oXAEqfg8gilM6wQRj)6f7 zFuIwwF_sMq{LCg>-O-4mM&e%RBbVfh!hU0J0IX3TgYi*ZwdP;gwDufUWOQP4DDZLo71u#ihecYHI?WQ@tMr+{6>(TDTHZ!xvtD;?q?(znyp~b6HHu z1T%Po9X@H*K63-#SCgN6xhNo$8<7)jGr-9j3_d2Pv~FKFktp(!BnFhkgtug?$%G#X z2Cat4pY?dJIxm zu(;d7HEU{fXP|S&Y7t}anxVZKi^gq2@WJ_o@}e+dzBo(HKs>3_)>dSb)KLVqiT!r~ ze^a=2s8OWO2C59-Y7&>Zb$#X}=2$j5u<<++ANc`PWG5j;*)7ywFt0G-e~9;)wKL6W zf3>}b8i?^_A>khfNCS(HYFArN559f(VH0ZNBI`|i5n9`QWykw^*WX_F_ zZ!)A}CifQ}E}rrMG*;|>%XNmHAKO9y1={GRT0Uz`?Z?BZkuJH&^uUOEG{GbDCX0wf zvWU{0OnC-0R-;*+H^j3RrG!qlDeg#C@rj$5%vKGu7`=hPNE3zIZUtY(Fb5H@-27BA^0d+#;-OeV`7N24->8$Tn80;%k}(;F z&_cuH+R}?2C?_fCzSO368)Y2V`P>a&72az-AeG6qQdpORv~tq{ckMV(7D8tv<~Z8G2IM1 z1YRpLRa3eSpV^?QLmtLN1B#j_V6^=99b`iIcJu)zGyeTg2p(+En?akrWugdh8-Y)X z3KZ(87m9@0GZugLowIhHg`{l8dQdX`aN$Z^=0C~MT}Te|%k_jjA#bSnu8=2!o5KF#9b@GK`s*>1l$_UuEfZ87;zL?@>awU12BS5(K>M={jIKs(& zzudJXz>W=f^$9VORm@=3#;3XJRXA+>j&z+=4%j7gev(wIXbBnpR301+^ zt+%Qxae)eb-}u<9-KumK+^>t6j(6i;{3J=p+9(krCRu4)pO&#ourCK6>+*JaDvp0d z8;}ILkKCafP~U!acT;L3uictQRCubHcC8T)IvHoWL3tl(CP^U6n_^MU4>WyFEfWOem>8uixv`2j30GP8_HdiwdR7ZSrj0C?slS}PWS*qzK zZ#|!@QC^!Zmrkv_hg?gc1vdH-0~Z>u4Bc|fw!8-ISIKa}=}T~fD8+RZZ* zC*I1<3eOG|I3N1P&a!CN@iQBYA3yjh$^Y1ncNpalV@z4Na{VD{%|GrdnJYIch10@g zd}~+g-~rcb0V{Y1QjHq->O~4F8OEZuT&I2PhcWKG%EY1yGU3R_GuBbBprK0J+O(j0 zJ6ZJ+N$O}v6?5D1c!QkoB8A}0bBDEhhBMZTQUwRP#@^E@sv}AgYAaKKp2d7}t(sIp zJY@_NCP$l=p^mv}4xt%{`?2sLJL@(Fh`zZL;*R4)zcnCf$d=ircnG?g982V+WGO~l zuUhF7S}$q^1>{V?JL`GBwVzbqjQU$v(eVgW#X+2}4kG)%jNp!6;B|yMwLuj%JsrD8 zzdh;xjeg<_~QK^Vouwu*|SteEZ)grg?4=! zMrG`3Tt#K|@XBYw&lW zGrJVdLfl`1^^E}kXk=^g=wuoB4;nP0_TVv9NUJK~2ZTnUcylb_#ohZd01iQ_S-{xy?p0 zoSY)^dHLL(iXN#U48_hvp9j4^wt(irP!T1A1%J1z*_^ERU2ED!$_GxPIsSr1mqlJj zv*8;^(zq(6HY@&Vql^9YAW}SGr0Hbcu2dwih(+`U*SdcF{OkGLSNlk6{*H?EG;Dn5 zDIckDO|8Bu))AY(if*NRy|8udmW0a6imPvzlhSDYwZtjsoE;@6J`M$=Qjd>#R^ZD7 zVRh%fM7||Z_-t>|iw(wNrXwW@)68*a0%j0gkSvJxCmxxJ5g#3M&6s`$n>NB_3wSzy zEB)#&`+{y7s>x=)G8HX`CUCx=9R>(S9)YQoT)t)-&$h7ti#zqepXk4>Swv@PDT`}pTVtT z_r>Ni%k)t=$XoOYQPRke{N6_%#Ck_gD>vEbANZ*l_9h$q)`jk&s+v%90?ku#;s-9g zhbp!SdFt`YbH3?h?~<)vOTJ~<=|LmQSV>?hyrVy#mh*a(?Ti|`35Nkw?3E*0j3cOo zbbV#reO2+BP_ZVF^xNi%#;@>~_Qmbm?(FzHmQeeTTb%t~=8ad3mGdLlCw+|%sgep6 zTi1J1Yt!h@UA2JWW|pQYj3y{^4__k@`fElW{7~!kBLCI^(u)gR6t!?;4LCSo_7G{U z{OA-{?{2?~q5Ksjr%N#1I;Ilq7p=yz7ja#&M=alp4&` zgN%^VXj7_0UshcV&BWkmZiv%X;m(8)Gr3h^KIyOZPkuDFft#Y!{BUO9;{BQi7(xHY znu5bY)mYO@3?14{9csSjnK~6C0?fMl1Cz<_BFZY1i^1#}jpZq922HaQnGnQ*R7c} zXv^w1VTeH(Tz8L+Hi=I=Y>v0zOsNWE`Ar@WRiGAkg5oDtYH^$;GwOHWD3mG?M|TsY z`?q>NeDCveI2&1t!$NGVuiU+t2W4YA6K_#xI@yBCZ0blHX&kE25mc5cxj*x38^IMYUVAct{VUTV9mjZqyhR5FG;Wd08lqZPPq6C?E{@+HA!Uk8&lJ8 zL~^>IHd0J7-O(PQx>}>>9TVQq-pI)Uxor2>n8byPZrI+fGzNLYUs?x)zT= zq1Cu`#cS1%wcLxpnvZa1g|0r^!P78Z@nhTw+d`9$C4oSm+KRd8j2l8T*6!jaY&!@g zcJe&voy_s=X9hbZJsqM5iRL`YDQNj}pelLY;aQ4-!#LI6MnP^1eKj=B_ms3V35G`2)O_zBkGHNrI+E$A?I-ijQx@&HZpF;I` z5tG{sJ*izEtHO>o?SDcg9r#9*T{rI=!sxk8>wmdg;nJP_^!DMXn*HlE%c+`*Z~xvX z+|SWJPLv%6=sb>cov5rx-&#Br&n3A!*R60(O{{wfHDqyJO9YMFqp9;Qb6=~;O|XaO zT}sl<)4ZxMfbd!p{OYDU{|yq07Bhpb)@L`xup1~?#|cJ>ry{N~d+)?JB&c*V0{?|% zdDvvai;Zrfs%MJ2v{70iI@!V&aq?wh9SIY>+)nnK$|mjWiC++T6ewBtYyRl@L%Yv9 zM;!)#yt?PoDaVS=l%f;w*`5f%_~m_a9OnkPek%Zf>d`?62rIytyajeyrU)SRV(U{s z<)jf&AF&%aF6pAbQ@#=C2A^6Z({21uH#7IW(p5Wylm!m}zYBh4BWid4UFW4IZ?x^H zG()2YfI?Z*s?+EMObQ$U1pf+xU-Kt;fMIbME@ODTvz8co3+uU&J95;3*vxV#NQUn# zsxMB1YN2Nh@*aXw+PiYynOOD~) z5O1rZw-bbc$AZ8mA~`AZ!~kueNk1S5PVk`{V7V^d6|(1UoCkB)!xw_0k-bx$K{1X) zAFi!q1WNd2bZ*Bg7Jjvt;B}vcd@*#au_|n733i{vB#Rfj3qpGNgA_*!W_Pv=7MI_p<-)z0~^t5S*Z0OsEV}uj&%-`=W9ZSg+Om%leeBSzY;3%#8U}6s z&p#xr&(w%B>0s$4m%Xj*1;q^;GPWI5==Y{jva$rZF0(2bFrT>t1O-zUOO=Bl$4A1XJB5K;SxL(IKDYw!F{Hg_d&`8M3(Ao8m z7(>U-wjSDca;~bioq_r7EaHRWoi#=?ol$1U8ZP^Ws9gg!_$W`4s@c*P63pnY8DjK9 zl!3Ll@YkHk?tj%PbJpl(I(S!eVF~(YeuH1U^lcb{HYxr6L>;kPY7Z6hU1pLHe&it( zm_=fy?QA4ZWn0$invL(Apj(M7@34{vy@b!H%(e?(GZ#!=IZpb1*Kwx}i>vpTSubE{ zHlz|(*^$1&4G-TDo#M?3lBkAUPfDwrHIn*hyXL9&&uH+l00^ z8puqtzhhd-KbM!FG2*nqhVHVgy~L34H9{YLG+d@=A`|uS8gJTztSPp|AEumZqB&k% zlL2!+ua3L*c&b8i$gsN(!T$!Bo+LRlGX3gSsY8&20l=aDV4y!ZtON7$$%!@J= zGDo9oCesK~saw(`MU4F)U+#;Cgd2G*Z>60fi;N0w}?MJ=VB) zXF6E`f%yhx8=Jif%4j=av>(j2J@*RX?>oTwRbyDq%pPBlIC86>CJEdF=`)XJH{}8a z1&Q;Hd!gmCve|XyMmm_h(a!o{CzL1R()_5T9}0wYK|P;9e7eA zdTMk&6XWcz?R09q5?7L|qSWi19Qt0cHzDVG6PqJB#JtZ1u&MjXB~AzQ-3%u`)OLIl z)DyD`Y0 z{~)|Bs-b?=fVMtk-di8i=FmUWiTL_$6I9 z(zuJZ+XPVFGes=rD?UzZ7f~Z&J@W^$;gC4B6@b!DA~cPSXmF`<&JD!` zHrtM;xf3#ki;rb26?p)Y8)uuWmpw4$%$UdxxPW{z7MYSBa;Gnc{mdjN*0cw8D-$`k z$OX88UaPFTH^7*{$x<5!j{f6PfQfJ%3z{GqHxPGiRxvi8m=|WUfiWHa+2_6^c41ff z!t2S^v5&Z}!gt)SFX^Yos|Cj0*Jko8JPhOaf6O+vs?NrJGmp@)idTaDVd#bh+V(2f z%dpTe`Y?5HZ6$kkvZigLY3nqF!YnVXtul<210*1yLjQwEkM09)&(wW9D;{Rzu_w%6YI&=tt zKq4m>{k~-rK63G-+vgu+CfxBmGD<}92Qmk<4z8<&W3%ttmMj_3DlXoztzg5cSZTh!OVhszy4yWzZ%;LkO7(Fc0Ze1d#56^4oyF%HU! zCpkgS)u})`)E6a+g5iLg91c<3UCSiCT<53Dt-j%Y-)bRkL#4X*s0fY@62$TmKngK- z*TJAS9I|ljD}mZa9LI$Ks41BN;>;V|qw6e!8ool=-Ib+lYSt0*tHRQ3sPUZ)>O!xE z2g~q3Nsh^_q&i6Ge&{RJ%G=YEO)lGw9`FD6V7GVsGW1^`Urri^jgQ|pa0{Hy*SQ9P zH5IENlVaLcZd!@2?mw^Noa1BNc|PsV^Tl7T>~SPgf$c3PCS>dZC9OzVL%=`PLJ|5-VjG&=Xc(#rc)CV+4rjw~@(9cu*S z1^jh-Q~22tH>Xwq*PdY<<=+LGN&$Xg^X#`1>u>{m-3B&r+&~*Enli8Eky%4d7N8{h zZ@kst4S9ju)xXc*3ke;&JO!RLZ71B535oXYZykTH{0X!^iG0L-$S2m0lbNQ@esf#V=PeFNW0WilCX&OBeGU9!;4fWTWT1Q=*aoI08XvBh_>$68f{JZ)IU+^6LRs%sZQ9T z@B>^njbn$jyUd!YpPR$+V)| zM-kDCcVW>9pa*kttugF6{A69tGJU`t>_^-p5TJSxp%4N}5Q~i9=!CswI3ScV@TdkZvGyV<~I;YRhjd13e}y_8Mvm5k0C9%v^YprO zI5ls?+A^0UQ!|n3f`hYdNN`lPJnGE4>Gv#f`^6CSDpkv11K5Y4^-(25#z-EMjlK9; zjcSE_+EM>N1>cE6pYYfc^_7zU`DP8x|H4fsBUJiDtoFF>&h zM~~cb!q=2k)7*|kfi-5gs`aX0L-;C4FRyVwONQgeS|FydCG$XP;;kcfm;dZG&-Kf3 z-;KWZXDYJM;1AG66MX-ckfocXsorHCSE4Cn;;Pg zYXr_lTaZv>8`OnP@F=K!1)_B-YW1&LQ|jiq&VlL-gzusPF}NbL*0x%i9;v#bVw9@vm!S7u^Tsy@k)1!c=Q%f;xhknt6IZ4-4 zW;Kc2vrn`0yF;M=)KbjBs)Z2aiek|{Ws>x7(p<$@m$)io*_V6$5X1Sxk7P zYg?pTybbV0$L>U)T6zzraNBTv_H8uAHduEsXc8Z*iXSXpe<%%q(&^7B*$-`%jgGok zbdEnm&fBHiN~$hH0#iEi^%2Q9kXuwl{mmHjoJ{z7DA64^`s)H%6GZ>%C-3QT>02_f zoa2lgL_hp(RS$o7!n2Z?WS@+SLYH5Kw~w3yQ3n#BQO`1#@JW(h;JU)#J3JM2)N5SF z>j#iXAm%{VYdmLgi0BOp3KB8GQ{m2-U)T@Yy?TUt7oF2dbn;v!5ZLwZp!PD&rk}bg z{wIFI${^LvPT%+7WSN}`TQm|?`^_>OwSj3B=~^mk15*A5h?dEYdk7(75tL^1k7l4% z-)0qU8h*nho+B2T&7D}qfUGL`&o$h(`Frar7+UhcW&>)+3b;+)nU)~UburSyH9WqE z)KkxGK;e0}Jtv44_?>bc=d|SaKY<53?5$6MWuhLzbA%U_XHXpU zY~t7ZQ45u~BBkmjupU!03Uyc7Jz6^06eU{2AWuL66F*{>oeTG^AjvT{7kjapk-y8WWkOGENP7TXC$oTmLvoV4D336SJyLtWfA3Wfvz(Mm7) zczE3|laF+%Q??dhrF<1ZC^Slx-RC{8Bz7vU2*?_{mkVhPw&Kt zOAW%X>S%IK`>VGiByVkiMrfSZuV0x*R&Zy~g}Cw(jKre1vWhvt(Sve;(q`>6rI1z6 z-aK)Cqv({O@prl#Z(Ma;zHMz=PQGx!%-NH&4zo37iA8it-9f@uyMGGTD*D%6euON9 z(p`+G{vJ2LUO0UNlM?_41RauZSHmeRyqvatAjiwA&?LFGL_Q<-P1>;&SJm^>yZtB8 zCHV$cK;}tZ_0=KYs%$Y9A)Hp%!a0hjtBILSt4PP-#VktB3@+*mt4mZ9&*TB8NMzT} zseBdcir~Sb!Xx&AUIE($lR*c7bk6s(I|WC$Xqvszy^qO*kS_B?)P3{~2Nk7Spibfg zGxA9nCGPC+N)VsI1UPBveob)KZt+fK5D+eb6ov~A6zVvWoG8R5@RUS8?4~u7m0*Op zBiCE5{poSDI+o~uKQrUM^w*H9;+|;{k<(el;`=!y&jy({ltI_KibO~5B!30;jP*(6kOejTGE@rrza@if8;tK$`lHve)MPBB zN1r-Hb2w4KOFFo1)I(Bkkhs_?UTP@2+CXM+9qc_4_VA`LJ{o_96Bf5f z&@_4mJ^ox#_7Vp(`p`(AFL*q9o=Cckd7{Fg5~Vs0D2ugVNo5-#afu8K1d?bjSg5TZ$g&S*T@psH#pBWF^?Mlr$f;pIqd_tJjR_@3W-|8$VMQ?Jxmo|$FCl}G)6qi`%GFrlfGz&`+*OM zD?@#4bXt>tW76N*gBBYHJ09P{pxZklk{WC3(3$}(L6(qhybCX1MW6{9b*@#tPMLA1 z4$7KE)DcT0t4HX5X%cuQ2w&k}qG# zw89RtuHN6Kr+-HBxDd_1SEjy ztWx`H7SWI$^vU*}crM?d{8)?>-Lp#0VoQ$|Xi%k`_dgO=`)Jm*0SI^Nvo_r$Y8S1d z3<#H4#M3L(upZ|Z9y30CQFooK?fDa$W_hu7{C3;VJ8)MrG`)>1_H0ooRwM6V<)7+C znCgx+Iz*mAOS%EMM{Xk1P)@gb5c<+n)qkgl2z69+`~|(LoQ!op)_WTI>@7*EHkew7 zGp@52{Ln(!r2=^)yn8|FE5Jr4bw~zT6VE^|RGtW8jBtL0ru)+VWCQhu!5UWYyQqx| z=lfd3>yKRy#YjI4nf*iU!rptKnpqh!EWOxakd5(*b7@U5$D1iMX5SkKu3L#bM8Qp= zAAVclH?@Z+2^)ueO|Et22xa4IZp15 z7XN57X}cW1+rRWw;?m$XIlk9n=@uqkS#GSGgpVPRevlc$^fFxMbJ=3v&p8Uf&$kC( z1vv7>2Nr6eKqXa#1&OQaB{=0Y9nWkwgJ+P z=|eoyf2YP=+Z3zSV16084sVZLYOYnu!p@i}Tf`c`%>2*f^8Y^?wL$OMua-xb54#IV zf}@;QD{AwKp7GeHmR{k7i#MPy02RaM2&>Fp-@J1rPrB$aXAXgTKVipP%3Rn3ZGC@J z1a1VlS+^XAM5?oKO_6H$yX+uA(0ex+#5z`mrBAtMgrZF)ba9HzwoSZqJzAz0FzB3` zlbn26dYY^6Vj_53=e`JErAW*+4sWyfIjUNViB?G6K_;!cm+V{&2D7y)JB?z{^5>aP zjc_G?oy>fXSHI~JP!UjqD7p&Ghs9>!>W1zb^;9%4^LtR6>18CtNnRyWMJILE{jo_t zX$W1zFd`#?$<;w_I>{?QCm99F2yp_W^7$4MwP7q#>p|mFv3d~2L|(%1FK;B>oRv6( z(<9@1zkNAMhF?#?tUTckDk-}j)xH&t?D&0(G7axEIywg`)acb1%u#B!Z{B+LyOtZN z;%5UQatH1+g0uZ4qSGKOfZ=0ORmZ0~59+s6hr?*=J;vsRRzCDa{24Cej-Gv+eO zz5yeXRbfQ3FwRUnt#+8@qAX2-XEkvH`XlxdL5c*p+*1Fg5pGLsEdPY8!CXn6&QUV` z0yME{5f>^R+*}&m4hOjq`CNP8pRT*FsLKojz__8{XuggA3$^D082ngJInS!rs;gCm zR6oYuQ)OdJTqa}i`0*0m?uLCfGPX%cYEbb@e`jn+o14kw9Q^j`GIP>hShhnElK6_l z@89wpTW5O&M{=%nHQnY%He6&;Vtk?lk9+LbS`qf9usWJt^psSe&&y*}@z%&+?dj}y zo_Svcd#c0Y;1}v_jMJI`Q0=o`^_mYfS7meN?I*l*<%s*a@PV*n{Gf)8^|K&C_Dw$F zxs9n>R)EqzA-SbZ2-e0HEhuAZxKFNukUCGCRsfPiXen@JD?uCjN<;bNujN5(ia@Wq zWZ5}gt)6l!Pm2TvH1&h(cQ$m1HUBP9+#Sa-LI3vZapCOxVHd?t4s6z%2MzqRfBRhf zqS``E6d8s7<>aR2Oy@SQNJXz4-Lp)H12JoBGSnvUC^u%sT6S#*5hf1I@XFAr_ULw> zD#aaEq{JLeUio=337R(pbj!Wy=0DY<0!c;0Av6c>Lp)*A?rE;7hX^l++#kf}4k`8; zsN1TBkab&c%`}%@_-+qQ?W`=ape^DApE2r+h)7+IPgG7iv%=NGvTBbF$x&N|?<=Hr zwi3hWTY>3I7BRqP|H|IAq&tzesY#DFZ3hnSrMa`sixDd{N1VQG(RJ(vM(BQ zH~$Gjs?brdqHdWO2WAVVje-+Qn!KUICG(^8v~{wHO}?7G!*0ErG72uRGex6^%H3MC z(X2OJkSd>@%>lWF*P|VSl&F9yU|VB3NFNt^X{=;g^FYdtWWLpcgPPzTlZk~Ox{ST| z{(enp+9E(vY(Ps?h*sN^nO+qZj-8tur2H{xJoU;R1cLqqsUc~nAqhIG|A*T9Xqe%6GL;z`WTy#V0!u-^q;V0_D%MOouI<<)_UEh9PTQam1p~1#X@Ec zMMxA9dy=JKryDar2=<`&UbAoeY6Z-+o|F6s2N=C~*r+{LUfu`qJvfZJcPO0ubawsO z)u@HrIP0a1KNKj z;*uS%6^)VDs#SF|F3u~Qu@R?adQRFVV5S*y%Cmr>*)x_veg(-V6KV|#SJt1^t1U#v2mFOZtVptxaZbk@V z7l~YcgDq)aZj~oWWU)V?GP)jn1hTu|3_LUXG^NAH=O7pknm%2U*P}sxwmXrd3d1yA zrQ3x11J^Nboa7~!;@U%k(9w*9Vu7{3@{W%+t?r1#kf|sL{J7U=-a6Wl0cphLja8-KHR$qiv@Dm=?ZtFd+KD-8%15j ze9*a$lNFPSmxPf-3hFIOo=nw824vY2pUOZ8tN1W5oysji)ZSd;2eujl=suCVT@oaL zBw;flw zOVL@^$4qwMw*HCVXFbZbr%i7FJMtA;GkxEjaM)4&t3+fNrVrsn4>bejI8{8*6BfN? zJY)!hehStS?I1Yhv?*&VIyphRhLrTy(HJmYo&*QDSV*kzwxDNwF_MbQ>m!EbVXCz> zgHRc6WRg@3#o5>121jR(iSM7)VfZ+U=u*X$g^RCSO`2c5fg*8vc-+pywS#4=Ym@kj zLmF-e$>r==uGb{vYW~@bNPJfmDF@#jL1DAbss4$y<4@nRVzQshatojMgeN+vhrPR{ zfi6McVyX=66xyN2%8NA|r2C%oKo z8BpK{fqg7?Pn9Py3zI@BH{V4Gh_dqgpyz?*yCtqlJo)$mNjvbc0YA)_;jTFeWcIe~ zlZU@F>&nk^w2c}Gu0U)rK$en_>~}A^-Mf>odk9{7pZ!FOJ0M-YFJw#jtsTRTU5<4t0awP~ zR}68?mB-`F0-}RH-Vk5()Re52#~F{tX&s$$2(NcIdcEHO=NYjwAxRNrX|~u$QJD=Z-YU!^S$EDQb6N)x@@8?l(Qw zvgg*wpXgY0@XXeFP@rePv}?H>(g$|HDHDMQc_NJ{%LQ0_<2?Lh*{0$g@YY??Z(`p# zGR50%e0SPE;?jEBW$c28+@bnsd;1eoY|cfKwQE=Mmqwd5rPl8{yemV) zeX2A5&$h1C0=@B_g&?3z%T;0moq22(qJ5pYLF@RM5^Lyb(-K9TeF|qOMn|$@lURzhM1T;##Dl8(VB^9 z69Cj?3vr?gQ+WzMUG}&r~#l0yQr3pU>=fAW^f~3D^jrLUa{qyQkMKxspuoB}QJ6_aWv; zO;O{6g9uPdgOo1b4Mv)$ggFce$_Q5xUZa86&O++i=pPeaa*S0(1`QQ*`rS1-rH6Qk<*6xsaBzlz zATCD|U_NB+%27>(I=-NJ)(yZ&xq3fXEaHJgUZ|Q)7q8(Ys}O3?JRZAN9yTHH9Aa1PWM4#IWk!i2zk@2&4f0&F z+Ew>koHS1US&vsb`fv|TkTpP_!C}uma#ia438G!#6@;zefZcJ8TcFV=duixdnzQR0IT|7eAJ8V4K>IhysG~qB7a?tNQ>L`#DbJO zblutQxQ@l={c?5!&+cjKW}VWttc%lXS8Yal3BPF&;*=$7^TN$v8##W-`IwDcQ`Qda zH?lb(bwdmOe2K~P;PK8RGCZ3b30nW>N-xrjw%T2&HZ zbs2Aehq?WrxCc7<#vJ)BR%(dUNT)>N-2O6_tAybPB#RGoH0$K+(NjTn7lSnQj*FBh z*2ez)Z-FNZT~lk{ivIP>3iMm))lwYk5k7oIollFAhW~EovwTs!PWbmBC#@DJ=^Lbb zjMeMOC~f)8)kO${pXug8F_VNZ8ZcjRjD|6bQtaai>-5EV<2) zVhOMw&Nl-H2Pd4UGfV4Tl?#~?vO3JzR~Ypj0xV5~kPxX9!;!36C7?EKw7{N!GY14^ zpfZJC?^E*zt?NY_ic&kEaf8n#mwO6v^v!J=*&F5mY41DSn%KH`?Hnr>6fBUVSU}JS z96)MRR8&MzjsjAmB18q`Ktw!%To%Kb6jRvPDEB)9}9Oeh^_^X#bWXzeemmA2U5F{#JmwbX$eh8HXR;#D&{yzfMcHLVmX%Y$2qJ6szY}>-jVba%-?_8w0Xe<*1y^j}Mer1R)-Oa$RtpRM!aupy zqHIiD6gtA3c>?x+YZTzRs&{)lMff@;Fq~2PCC0SL?q*;yGpLvyuvJR;cfs8O(aRgs zkeP%eyD#xo6ig~|Eqk8U*pH(N;4#4n0iy`XCBcHfqGy858xTx_AH#aaI(_n);F5UAO z+Z0?7o#8AHH4U;-q3?iABBrzI35kP2-MKp%QpQsuLj3cX$=;3@EoS4)$91B+3An*msa)iv-4 z9RxBUCc#&@6b-lv9VLKh19eKhgub6Y-X_4yvLVKfNp6X7W@u;(YA0wILI{!Qr{!a{ zRl@llq65+>qzFp8GK5KAC(D4m^jg#oNHqn#wXY>wO0TmndsMqhgWBhMZN8q?C$M+J zd!Lh|%w}Hm1n%w2Ms5l=fbXVXV#$Iq0B3Y=EgabB1YvlYcgmlLZzrbM1i=5EtqE3+ zlYE$hwEWWluo2G6;riTK^nMQuM;MVj)uCw<)R9+lQ3_yI*0gt#0T0s>6zP&7+jLhW|()SgkLL_=x3Pmi}q?a-wEMBzzi z+D07SG1Wo$&{t)fR9aZi>*qwufw~0F7oaP?jNG~j2wyL}CIqq<4cV2qfQnZvS&^6s z2u}7C!R1cSGvjw=;L(6Qx6x{4v<+chV;BQJqv_K5_hC1en~9JXG^h>|NHdspA}6wf z3CL{yfJ)5*0D@kv2>B#X@M>ssBgufVw=9wJWA5HHCW@XC%lDmM2&XJMHg-m5;$sZ(9Tx2QX_CGjJLu^n zYZIjn4{+ve`piAl!W0WI&tJzV;Q0IAtzDE*X#Fu?$UYgthrg>kh4}vg_{Ksqs)gRg z<8^!e(Fp4h;d-WxM6J3qX4ED`{PtlrNPEyp-z(G(Xh<0pk_iwe z#gSb1ld+(P7!x_2@(ugmNEcLC@2oDWB?m7f5P+`+53}ss;c*y2AESd(jAfKh zV_~*X57k0KQlL{#YHT9#0x+TT7J*{*u{EsP27+SpZI^GaEq8?IY0G_TV<<}LJe zz*Q#Ama|d@Cpq_6{hUZP_1AEkRAC7Z-}QS-Y{Q2KwW&d@dA<4ocu4 zK5J6e;-mAn{JunZXpAr@zAdy`InpLG7b9;ZAvRJ5uC@}$7{U@o%Ae0^+LOHIVcY}$USLT>44nFqS1O$?6IFaQI}HWDvv}!05=EYA^aK= zQCJi|AC;DXfcSfpkw?{368i-pC;xkphW3T$xR?gRDB=dnVV|ueGcL)^jKJ51Vuzw6DhJ~*%} z%-}RjYfRCU?DL5zl3W8Wl5%$oLW^oZXx>A#n}M&@z6I?FDOcNlz+Xp_P^31kuAdyi z1Ig|moKe5&-vEd14|d}q?n!PBowUa2KKZ_li+YX9AGFj+wH&=VJpngFoNhD{^86T9 zfDy`z6am4U9zdFC2MFuXYgy6Fa>76!`T>Cy;HsNY3RP|ws#u^%oWerCDPYh9Nc?cL zdKlf*ZdNx61|W-00dd%C&7!}Q#mFVZ^6z8lHvzzr$7Kr1-$mazTKNcgj94CXDwhdk zU&7n8DSwKjeKzDtDByMTB7T-GQZ}Qe-dRY`d-@VPXBqZ@gDB(jdb%zgea7y7kp?1^ z31>QuZ>mNY>xmG`a+v&z-z5ywn;77-f{{{9lPZo>XQxc9h($sZdmO0&$cMG!Yl>GR z%^S*FpOr_4+MyA$o&yFFpWhWP<5M48v#bxxTJ&M^VUra{WkV0ZmCU!!SH42It+Qz5 zEUF5fyfxD;{6bdDv}yXs_V3>L=cw+;ansA=7NfhC;SP$?A~UojP4G<}fU=;=gXcB- zkV({4`UGm7QFS+8jWCa8b_;C>jSz6b7-ItkP5|a;eNe94gh;*$t(w5b#wdC(G9hmd z)ngw;KFcIkQidMJz7Jdho;r@2?hZwEYJhXLfI35}Kqh#OIioO@&sTQK13j*{IWL(LrY;u!1o#232-(A&ci7rI+P0SOMCrwEn^$!q4(6pcB@!SxLq+l7GxJf z;-xcTLDZNcM`Aw=TGW*Pn0?B+ebGpm`QEB$l)X(TtE+rVS(L?Go;wF61d`NCAN)1% zmiyhM?g#vw?)8!{U28(97 z(Xo)g{d*$kzn1=#831vBJP82Axmago0rv)vtmqQe@D%l2ksn+|6R2OB$&aTKDGj3e z<+Vn6fmzZbgTce2N8f5!cQV^q{;2}N%MyOqUFgLj(K|%=px?$}FiIv0Um+lwHFz?( zKw&|kCJ0a)e6f*?v~??s80O#lUn{9lN6F3cdG}M!S6xW7Ik{-)Pt!V$aGhJPqITTT z6{L7`=;BHO(<6wB3}rlOG9v|#XekKbU^)Z;9hwcx8uWR?-)3EcOxL9bjYZ9hZSA3}fT>6V*X^ zK&gkC77L9*mgxtR^*V?_$dwdA4VsQqO6&O`wEEhO6m_))ERs16IYFl(!3mcRj<`f7 z(*~`!+8@DgIemfYp!Au1>-ndf z)xX#v!z{=Y@J0Ehd@kh2~q8l6&6hWm@=YX`37x6)azcsuF1L={sCdy@R`c1N)2i;5Z z{4}rmL*>$aob8nAc>VJDB+uVeYlFC7iJ9Nc31KsaIAsK805k$p4qu~7yenA2lhC+` zeSSC%7m8R4;!jG5jgXYO7m22B2mmw6(3|cBWug1Q3_869oRnxlDlH;(>^*^Jrw>0i z0C1vf?up$yBQ(A!yDF)quEdybEqzU;g^#3PEaPJG$GJuvJkZ;(`P`c?CAz%tIt@L4 zK?Qx>v2uv_z_q270+~yBQ%_PyyDlsM`YND_-iE9&~Zm1IRjavBqhV z`dfd_@4rt*_I-ZAR4E${rMr70vzPa9+lW^#s6vr5iIM;bI28+MKVl#;(zluKi zK70G24l`26Anz}z4lXAQ77;v;NVSPo1cv2VbW3)KA%OE}=sHS0>&kS;eQ5khCSnwhUlAxdPX(SKkQLzmqWT%Mc#(}wJ&~9pYc^K6YpjiJk$1Cx^PTc zr$Mg=*RATN)>>qKw3x9-B zDgDb2Y6I^`F-UKAxh=7f+UVK~#Zk^!MTG@(aKQJB3A06r za^qHzyAy;chC=7DQ+$&B z9RfB#b^D~$>VX7LlFZ4PV3VD&oD4{{oCIH>te;;&SC_DYDb?8w3Np!+*q@I^-B*7u zAID2Fv`=g*7!*k1OEI!rt&?2cKQ5+cZ95d@1a=BN?-4KcP5l^RSAjY_JY;KEoFRg1 zEzk$3V__8PLQ<;5F~#XXSz$Ahq{H-5*TI}dY#nkSAU=9Ly?QXLW4`#Qk*g50HP0#950-04o7_>_(p>|e#q9TBxqC*@Xbc@v(H$KXoJ=Q{04=Z4+&4vGbgBtzaC65-W2mhlR&=u4_F$qNL*$vkF6-)BT){*A#- zn%O*YC2Zzg!|+|;(hvkqx_NbRt2)1JcOygjRi#wPaXlD_f3hx71eqRrY?DdgJwq|5 zI)jB!BrJ7kERs5_kkCl#cPoT&d}o|bHz)lOo#5G?|YBlg|JZ?sfB2Q(dO$q#wuMH*woFM5EONzgH$LEjggO7 z6j38AwHebb-HL8};E)OSmkMbx?MwS_Jwv?6<~d<&;RK|1DiN?Rf)tmXgx-Gb?7_Yv0u&8tql9 zQ##Kzy6K91zj?Jm#hchgqw?&YB)a)-IX8dUNfJzeYd8t~7m>=$PPn`hISoyo`06An zQtmNFNr2%!Nn{O6kser@3DSK-T;5?3%#om=_S0sJ2xtT#pIrS=>Q?{yN_Ux*3JNb~ zss{Cmuxj3a53Grd;l<0lzKS3Ynu-P>HWBYd792(4bvkav%u^d&A)Z7za0+0H2LhUy zBXfV|JpZ2%64R!cDpUxBx1hpKMmW`h^+vEAviFfP*1*w8ex+!*Z?m$XX<~eJQ-+4# zQ>J9LvpqqtKCPx^11n|C+oFXKq_t68HT;GOe(nldkL4P~ZhG1PJ`lH1EaIrl(Z zP@2VeSLAZ|c0XW2He*%ZlR}(Dyv}3_1I?8=!i*+LF8Wy_sVat~(O`{9ib5Lg+faZ% z;!z?%aDS0dk4pC(bdZ*JznNK^okpEfvBR``{yi{NyI3en*>-d;JRv}T0gV6WPe=>> zqgoGsoc|2X6+(y_OFEG#DT-rjQBa$Z>)ySNoAVd%$k|*r_u-j&3@L5BEvkEDDA-@Uawtm)AC8M$kK2r`?P03C12t*X9 zK}->&F^mv96hYo&dsPjhgBS1kF1V`H?LM>~dEhCn`+%rZp>e^je-M?j9&SygYePT> z(aV%wG)xGtWJ4!kbKaw0;P6o^zCaK{895m)Nw6B`+XfRPZqb`J&6xJIbJMg8%@a*~ ze`LMdoY1O5nEfEBT6`lYJdWA8%e8Vk*l&F1c#U`tS2Y@;23q}~EN2Yucu8kG?Y*S+-&j%Gis9#wGdP=ZK3`;ja+!E?Qs=qiM zS&8pOkL7xV@VbOr@|ec;jhMy5zxd|%enUtEg=P$*^m7vxWqZw4 z19o?+Rn``l*B(D?R$^)-SS<@yd$j(hE*F@DE~HQ%sfXnhNS8?*kkBPJcwD0Ry{Lx1 zsafZV3FPSfK90v#wRxSvzeUFxLqDYHQ*VSq(R|7{bt&W*p-awYl%i=Tm-wXg;7>0) z&n+P6dZdyOkl+-WeF4t-lgeGw9AeAn9{m33p6%KMrP=3O!?kiFYJc74@0*Ii_64lV9HrEG!va!D?`Rj|nk=bElY~wne33{SYD7Zf3k%F|y4I!DqCTM% z_G`}LtaopG#YzK_?}!ZQ(3MJbg-E~`nh9jYx27V(w%_MB>=9Gh>m-6eX%x`lakCmX z6j9x6dec)gvy>nLNg@xC;8OxnkK>2}3g0|7KvQ+H1yGpCd zvBkOC?djC<|6Zv*ph?DEg1zYm#h!!b?ovLFfsHLwNT$K=-TYFfSfDVK^_S;o7P->6C2v5=DoNp

J?g4XUGqgue;Zjg5l+I_JXgc9MUAd_fpya3Y5?!ZmKqH>1Lw z3`vnWdW4@LLHqe-KMgc_IJsETnh$I=7X}6k1J$Rjl*joTRtX)=Tf+?O*|!p3Yp(Ck zy99C#=r4-}3|IhcJ!tt1lh3IP`2QA!$S zP{@$E0$X3iS!L|o#X_7T^#gsIPr*sL9I6N8UO4hYW+Sqr>J2Bw z?`rm+?^e0kwKeHRuy$AesMb)~WB@LC~bPSRe2dI)gDGGxdf!1D8^t$ObaWYMgZ#us(XVWivVo-<;ML&#)&4-7J12+ zgZWQps}TgUO#igio_g0wc#~oz@S5u083Wxn8S7|pe7bp^(66hKeg%<*P5CU&UZ*hW!W)L$R52e|qR? zK&~Vd=+&wuUF6{MQQ4h@dB>_htsUS+dOIyzQwu9x>&CA?x%|R)dxS)L)W+JdS_E%c z_8!|bh!UCA7%ifzcx7uXv7_vi<+sDq>35C-J{t8dq3qseP&8DyP`vokR4~+Na6O(=<^|^XENCOVjF*)|EBYK9 ze9Ui2^yt(fDXV27a)`l6Vn3aX{}3?D(37mJ?h$o>>BM?)W!z_(a5H#Z^}w4fB!F9( z{Mdk;S3~`f*LEIgAt3QQ;}#b}$(EBq%LD3mq9Y`<2<_TU&$W+~4>af&dnG)}Pa2 zPt2npc;!Nx99Ok?!I9-YIr8_PBV^~7N_}=~U_nK`KEKnmwX`iPUUCT+>S`AiIg*(o zfCX+Lgv{s6@*lvW?iVgT1Tm2d&PxyI4ndmsFAsb9bJZ2xa-j3EFD^2_L~ zCUxxXLV}SM$0n8Fj}-s$h@VY|J&=d2w;sIB=vLH#@#$6^gkS2HD7KRqW{Q0J;C3_5 z3D|sWeF@UC%Iak9{$xKop-+~3$L!>yVS$hp1cD`;)t_lQzezWkyEV5u%vyXwxbB^? zU3=wu%|!CEM7Qs0jzg^Dw{!&LEueW3T-DVMm)Pz*$IL#q{|W9Z%ip0$ruZ9mo~cJV zLkp?L`917-FJ2E4v1Y!>pAqTUn}Alu<^QzMW6!st!QQxu z)go5yY_*1c0Fei(K<2Bpk**~`8QNo~72yctJ52nivMWw?TWOl_^6Ct!o5Xe{mcuw` zripavkg%hl3WIep8KE7@#mQ5(5>u~$9;hX|=4&V7M67lH6DjZct@p8X@bc)>S8gjN zeq`6O{GM04TdK5ljssI2f-7qc@C`0AtMFZz;-HNor;er}FO_B;)?qm~c^qmF7{Q3(1<{xd!p zTPwdzZ|Q78$(yAW%<81Z73J4>I}ckaCl06TyGBAd|m|Lh~ zzRigAd;2l9ksfy0`d=rrS=h<)$1s?i$a5>Z z*1hmP*E$-Um0wsgUlAV& z9b@^$$z$!BztlEJDu#CSgtP|ti6W|M(KbnuD?98r;SK1+MQ`%DX^`vY_3=k5 zpA_3^s*ud@KHO z;~oPm@U>d^PsO85?H>I>$}9bZbv^oy6wB6-Wbp zi3+GZhN}Iqz6tSAegZHS=)*$(t>H~3kc0Tc)V`$cvJHz=u`vQBSUi<4y%D&=$@;s= zF8hMEd^UAJw}e{nu~lGOEaB+0#7McohXs@JLe!_v9$8J;ACQ9;06Y%6;k;+{er_in^>R7v@t@d_rB&MMgB8sMK7Vph#l~UER1PN`F-s(! zFLIGqIWC9Pw@3&J?x0>!_UX&*RA{PWLfu1Z{B6vEoJ zxa!`FcJ5KU#~#m#&6LN2UM9YcX{VtAl@5>hbQEX~tu7ni08B*g5ov+qa+DpScwIY={@DtiiTcZ`dft$Z{rIzwf0Q)0yeZJf+$}&n7T0 z(o<+(Qd*G3jww%0ZeU;&f>nC5aEFaXOJ1ON`wC7|P) z_JmgZ?9e-7CRu^`&Tc zgw9>EEdHhE1zDqMdv3G-f*Ys=^w_$&wU#0wLdv=d4~B(!BbNu!V1u$!DT71$&0qPVbIp7qC&&$&>rhLjmfDc_0KD3C3;sWk5LJh znfCdng_}C2(7@vn&$RkhyB18P#-_6WQ?CX5EpC~KSj zXR1QvJv54QSE!(XGq8Z@P_h9FTxUYe2&dZjF4RRVs%+xl_kf{9k=cGiwAA zEz(+Y`xSA=4)woxveo-9SKjo^e2)^S=kj$9CGMqp=2;A{YI0vVkDuZRiahv9f{#9^ z=lRh`Zz1yG^D!B~&a~WosMUtk@Cr>Vz2-Zy*X)4{SVPfhRqN{U8@m4cst!lyd|un< z0X_Vyd5K4*hF^5X(2q?Jvvcb!icWNTXKw7G8%Q@G(7QRwD;-Y-T~*2_&=U8%9{pR)@e$gaF;jelYi{?u?FYDm80 zF-p1~;$xmz4BWf4``IELL&;3=3EO)1L?y3rwy@XWxYiu}k6Ye(Ifmg!k+m~I)6w_wqK1qUKcuYvx;IMq)LuN8$${4H?P!-IG7@AN zL1Z<7uBC-8r=_$QUAHz`NNlv@l?CPyeg>8w)V_gsaQz??qo8|4>OV~QpzOA#y%x6p za_}x8fB5Verv&+@GIndlZLT&bK1li1@B68gZ%j!mUop(H(TIUAZ9I&Gs@lXt#E!_R zl27c_UHOhG=IStfcl`=TL1fAl)ijly4M3*d!0=}WKfsLeHw}$=iiB|#8z#j!gVF5Y z9zKtSEx)Cux9nbRRMjJUC!ZR2?cx4Yaaf+Qx z192#r{pVe3>9bEBN3eRPZj*aOA7UNX;IYbiS2@~CJh5qf!<2z(B>#=W-hJ6~Kt!8d zE?xjY8Tr8To5Bj#_(Wj+7rXJG5g6fKzRt3`rI@@M8*cRd8#ndNYLmGZYGCeCF|Kyy zH|h2ne8~C+Khx*UyaoAA!Pb_|YZ^r6_Y48U$F(`ASToP6LI!a(aD%{j?nmAyxO}8~ zR>aCcj$3X!p|a?RANKvqU@J_K+yL%l`rcId9%>FLLm7t1>sbbgy8DyAISDgF{M|c2sYF}L29MK_AjP>4~!1I(t??>(A8N^2!|FA3#?qdN-SyojL^EYYf9W zgMY5}B|P||Iyyg7iU;<_cgYRq(4CPQ11;dFMft#mnOy<6m4dXcUg-S;IiBMLJkjaT zfFBA(+K0FQ{Zm8{3%Kl{I|6Na0O9JpehvNQ2T_fO9a7@>e%CRLh9>z3O0f?FAHzxO zIt_hzutB|z)qM5XWWd-vv~t+;mygf5O^yFNY&HYi<_^62_NDi3q*3$}a7*$t6#WI#^!9L7PtJIZY%ewbvXtg(nMFrur}N@5Jp z-3=Ytj~LhmzKcDc<@XrK^hBf!;TNy2uQO!dOFD&%t7pY&25Q)UYDiksZ_-!krXe!% zy)t*t`G(c{wdUH<)Gc z<-VQ0QK?+h=aZ7;`9Y-g;A@NWN5@)w_px+1suuOEJM#}}_}O*kXilC?lzJy#z2&#( zS#Et)wHw{!<^$?7)xrjnelnQ}jG52lhG1*WhO9rg_5=DOT!pA0e+ z{FNd}9n`1gXo7Ttec-sv;=AC{nhlUs_9wjr+fO>QmC?z}H5tHQ_2YE6x&K(Fl5NPo z-CpWvz&)B)`L!H?=6WyQg_TyWX+$j8;MBt%hmaN7nkEg=v)p5mOo$Y^b8k$%rbPoi zH&*>z2WKKihgQxicO{1>eMG{hr)adHwcn+A;Jjn>jVA1RNoumx9i{WGhHK#MZpNfK zYFU0NWejS%MUbh05TK%;DJz2BP4nATkKh+^0w%zo1=LTV!<(&J=4opJ6+o?~%r+zM~KNQNNaI&B_w5alT^@hfnweFo?&TEQLNu&KyiK@z#(_f0WFX!lp-jHPE8sJ6mG2VcT*_+2G3~2fQ zM^I6eL$u4^Xq9hbz$uusL1u--IPC-%{q*hM&8djKX!!!6#9RAlGL z#=73u+e0Tj2R@(f_owxlwmy6eB^Q|HZ1QO@;`)mY#c30{V5vUk*@VOQ>) z{g!}WS7FB90-W!)xc|O}ewdeTYMTw&eks%m+IEO2OS+`*cVONpHi<7$W???XkHPFU=4i92he+TATU|;0_y#1f&@IRB_ h|JlXx>egH-)Gl7?T5vcrXd3vpf6t-adAm+r{a@N!Py+w} literal 408771 zcmbq*2UJsC);2`}l_EXVC@3HxRp|msQ|Tg2kQQmuK_HZDWM4{y-4r9N1F5+ zAoLCa65x;T%)Il?H}kK5{`Fli*#$XT-byy9@4= z#%KDot%%QsNBGBm0zAAxYrJcJ@1ush{(eQ_&fm}c?Mj%A|M%Xwd+7xK=zVi9o$w!R zVv^sFIc9jZ;4U{DpX@aq89*vx z!j#<6+}~V6RxWJguzUDz1d+P&#bxJ-`}Xwg{FfT<$~S4}Dc>cukEL=4yO|v7OCJdd zQLUm-ZKtPTJv}{=>aSnF3P?yW($Ui+#fuOF1ODZfh=4;BqHBJ1^z}rAwbn$ft4(5B z8aXpHvB6SGVj>9$1QL{vIHQDjA*9D&bd8`lPg`W1_YOf6ZNFAPp)N4nC%gvC22fTR zs1)B<{!4C{!Ug(#(KWzh>9}{3!d2&3eLHe$e(5X^rG9~Om}*KV%dlIVSzdm(C7E~e z;9TiFZ0rgN$ww8R12*r!UztA_@rGsPEl7uZ=*GF>ORtJ*X9*-MR zpX|&|2LWVca}OvfB1)Xu?hyR_z{B4SJB?5HxYoTj^+VZ5UiRAm`!JcMYW_v!-a)Hd zFfGLm`uiu9q}`}~DkQ=$M(QH?a|Ph3zh$AGB1Rd(`h=0su==*0X{GHXmGN8)KlD}I z8=1~dw-lLs3q(~r(Vt4F+}dXCrYrp~FlZ%ZQ!2MjQ;I;CIOT2pzaL!e3juYu>ykfB zGa{b`DyaPzW0bx2iwFOMnOLL!L(YH9wdCYR$wHyzmYv}0Y@@g5M2(B3VJdoWv28Ic zQaS`BhTz6d^e#}KLRZY>sK?h_L5zHRppLhsAJo&N7zpQ_x>%f6-tzjd>n#}ncSHEU ziBg0OpVVbU!7(={rVne$hA!1QK+S;jxt^S^Is+-~lSpU3G+^~K3_meX!DyHe)G!&_@+ zu;iizCf$W&YH%|cJy8l;tlccSHE!slDh9j6hTsuA{D(aM`|tW|Pe*Zly5W^7hxx|6 zOU!N{h4kqikEt?qWt00xI@{)pvrfDo`rh>HM!c}nli50VhwAfgvkE-{sP&cX4qU(nGfgQ=5(#ysH9@`G^{_3K~OOcD`xlwr*F=v!V~1CFuU4 zRe!42|5w8bj#pWWIoZC|6$y+CsArC(BGYM*blW09B9W%1rWqHBw9o!4{rtZvhkSZ0 zUjB}nx_Z}jcY1pIHZJAEvU~jT4S?NMyil~SPT_-08$GhffgT@fmf7=%(KG#nBNt^ur{Y$E= z#hPQ|V*m3zNCTR0-oH8p1FGOD|I&l>mhW*+@uvF~Qv-+h`TqL)x@k?|XSsj-BH3&2 zsZH1xTK#VcO%2bC$#)F-~F|7=%0$&e150I z=-Ab74K|Vh?C?owU;YpK*rf1wvm+X3YJ}$A@`$Q9hy3~YUm8cTcmehO;Q~r*|GF{q zpPI0*Z+gsLu`)5;qNb)c{ow5E{CFpInC9OV*EfPhfWdKpsUxD5JL+Eq^QWCG;3Vje z?hbN)GOM|w@K3q?BJvIYUc9M&#pJhO)!YY+5QIsY{pTw#E;;(V42Ds)MUR1oPaOG)j{h;J@hf8_iY=GxqXZkn8+NQREJv(gU z%Uq`Z_X*r3LaF*X!(C1$_)}QhVYJN%3 zpCsVkN)KN7m!(cOzE(Rn{*agV6ABKKuE%+)#nEqCr4-Zr`h80sMs6cHszbjVt}ZWr z`y2DQH)%LwdouGFv9;aSRJ-HEw3N_)mweNRy#CKc`|>wJ>P2J(4ftTzN608 z=7M-af4Nb7$vxw-S;%sKR`qI{o}49@FjBibg{0syK_EHHd%$iP0bfA*08w@z1(4iw zFeUiX!~9(+<^E*3Wt-=21N{W-Y$c(MkV5Kq$!Nmwh4bYmkZN8hDQQ^!V$)h_H~qbS z!wY@`JUt-nZ`nN{I?sHvJw1+kP22Ft#AI`?SylZZPn@o#H(lY}t^aR_SQC_NUu#_$ z#3%kgH1ro2{y=KM5EEzVKi@DRqg=~DoE^fi>P_oCFOJ6p4eV>~7X?h`Z(X5bSMFgO zi-AD$3F>%pTk}X}aVmOp^DCLFLzy<2ixC1>N`+f%gCXFckbu}5n|SwlYbay1Q}=*pw{h(Me%|3q)>CCIn#z0@Aer6swzqI*r= z1Vp(Yj0g1Ed)ohqpWe`QOxx7WtuiUu5FjD2q5mn1iLRTD3|zYW)~@U2JuV^X^R+B16UZX=%;&Y%$cSm*>VRpozT9r@Qb>vG z<}YnZ+B3B@DbxIhG;-kN%_4f$Mgbuz4$fQ^ju?mOlM*iAB4GF0*Ocf0;LJ>JYo#RW5p0~>Mq+eIY@;^y`IxDdgxXe|E4I?mRT z^83bcsu$fR2N@Z?Y&Q8|VbPh!AH!3$nU223>U}h{cQm4&ps3QdB{_elR=rtN*Gk`X z+Tn`E@(xs}{ngkWrQq=oI82t^-y7z?xTu7Yi=KzcD0&}{>7sdVbnyJ+nV;+gT@fsyf~JwBQ#+kZ4q+#06Gm*h zoJ94rtN4Tq+HZZ)qdi)S7Zh`%_d5eC-|dSq0YId6kD;v+yy2f}&T4*}Y{y>G)YH+^ zv?q0KW4doy+_ol$?B;CzyP7xr*ezZkUq+XBcby0{SZkdo7S3(>p+o6WA+)*!)d}hj zL5GxJl;jc7bD+f{8{ zGMD>%EBr9=M!RDq@Jg)cQ@m2^1GFTJ;>cygoxUhpOUAmjY}4^-*vDvNjBZbP8* zFu{;PD}0YX&ESy(`?vAF6NvrhEztzip&OJFd)L68X~lSgXYQ;0lY2M?4fqZ6!F&XN zfje#T3o8l6mHu98islaw%l;nc*aYHv{E)#eQjqzYw@=Gvu>9R00A3Ot9`dR%23XvE z-1sFB-=RpDnMUeEXud^rX!P)O;Cw`9c6qt5sh8~|-iflhtawZ{SIM@Dnu{rho&hUP+DQ*zCJioz>ldUuk(~_2p4hEDC2`bwQes@%DO*|SM%`U8!V5m$U z+TY=E@1pfEE=OeUK0ebJJQ{htJYBi{g~xU1G6;(QFE(@+m5t9| zRU;!Lhx@!|yL`gNWCkZTt^od}pBtOxN5?IWby3h+Qmh8k@qU$2{1^;xwM={NJ=sTY3?%XD{6{9&BFa+l0<_tKxKj`N#s~!5hE}wNG%=?AzL%-Yh2Y_JT9HsEyETp5T#QN~p zUT3m{d|rXZ1Vx}1F*z$qxrNwc!6z*KdID{FudA!`Iv<}Ysu+a!AD+0khvmDyEgiAn z%h@|;a=1oXa(*1omw&-3aTL$sHfw_AX#3bx;nND%htyYBm|&jUeEwnv8M+Kl^5O~- zahRhzTf92o#I#W;<}d1XthzU0W<#=ZA^+0%U>>!NKLF@2Jp8$xmJ$-Vf~2IRW~Mg3 zt>yxJ`5*Gwi(MEHdXxq9r{+|9gat}_iFu*x=E>lv?VOpKJ1Ci}Ge^V|^rx$f`75%f zi){y{%V8Fsg;SiP0j5D#llJ0@y}lOnZpKd&vvT^z$)g%inHonkM&q|p7&D|AW1E&CTDDpwJA5G0A z6l-u?LEB)eWT5u)lr!0ev?J_{`;+8woWTp91R=1rye0Chm~)xnx9!^SBD;j8zOQ;) zLYJY%&xJ09Wt?cN%;Tbz_sL#wL2lGr87GKSv3hTn?&;2-Dtcu&oA+)51(TZ9`41}) z_Ih%Awn|B#_Bo7)qVv^#YGsp&+N_iF*T=@W*W5?kULnq1)q|4xMFbt5vd-b~NMlo? z5xl?)XZvmC2`aq9#Mj*q%knxCHnV61+*`Z|5ZyTZh9lO=lLhEEr?4N3y(Unh+-jwU<}jDCV7)a?{@ zn96s0#tB(D>jg(TDM;QD6ks(?@u6&a-#h;zjaKoW7#jx{15%q05i-Eb&8ABm|HQD1 zt9{^=Q%B916ae^Pso+s-@5h4oeRtmZn!9Ipet@_dXmy|7ECcL*aT^WO(2R)qBDkBW z`a$IrlcoJ5!fDa0&#}JN{IimQ^EZgenZxp@*ye|&4klhHceemPnS*|n4OJ($PYQNC z4CpTS?u_gY>u|cm4fEiG?@NBz(@1RS(Yekl49yOgItjdRbluGe%FS` zey-40ZNpNp!VUz;+wLTd`HcH%g3`L4GPemncJw+N5M@{9IO}6R7C4saCn_;NDE{gK zxV@ZzF9`jn*3U*xXTz&ae|j^EIDoRFN~PcA7pZfCEw<-0a*>;`aLwUNp{G;%ai6bv z4hzbCXbRBTAS}YS)t=$AqV=Rgl8Y^vx&w&Rn)>Dz>yw%-vt_E$-x^SACw%`gvtVMg zqjO>`mg@r~!Uc#i=Y4}_m0<7X4`W=ZwZE3XfRF+C-hR8ya`9Q!3Ojt_^1e8VICNm^?i z!rypP-4Lc*-O4ReE;`db32sLn^u}TOCYRac+n#l{8>fLRi2Ks1llhhKVs1))SKFUN z_5HxFaB6jiJzjbDB?yjxRQG^boj~Z?e$JNkQwZcfhvya{6^f?q>k5m|QaX6$dk_|HH+{ju+FcwdsoblAA#VTV}X zcPmqfe7xiLMUBl$G^`0<8pJa#^v(aN{RfffPU0F7=h9zZjb;x)f00_$bSCWw3o=!2 zh5BU_=G>kb%A&1_+D&yQ4@^pWCOsTs(ZR7=260l6dH;ki;j5`e5Zk8$d5B++C}mNV zRO8`}q|w@j3D}$%iaJ-E~G&JJ4Ak4x6TvAH@m^?fkH_ zKHAjMN2(k(Kp1wv*+3U|iGs22)E^G+QC#g&I4QX6EPr)~lHky|+Cp6Nrgv}t0JSCs zqb10ZBs8YoE#-zqk_1P|dg0V*ZJFS0KBb#DqV{K4^Zn~345+E;h^#FC%&6knQ@x6b z&geLW4zBM4+u?+~!am4YfpNf@`#Gd%!QY$QwspGbL z%-&!qfT83W+r_yWODB18)1~6+Y+v!G7)w;^@H4@#$}+n*r1a`A@Piwh?CN&Yc3l;) z4r?PtV7VWqXAkB(MMS$zf2iwHp8KdKbgy7UXNbetLThc<)`;4*oJrEXJn~*T2912gErhAH+e$6u&D*d%%B29Lc>6v#FP713x4SB zfi4zP=l8>5?yAUORvLPDReg;uqv20eXL;&D^n123XD1H*m;0;t95kUO4jd=FKJ-~h zb_FMbPiW~>_wm!8<(MN)m*rb*t^{_%?e!r{Ukxthe&s|v4;5)3EG>I!S#JSB#h0 z^f#*E;@$#vRKdh!Nl6~$z|9Ft>IX&*}$WtSK$V=^B08W65k?lDS06 z5Og+vGJW+so&bZ-*K^xq)TJ51Z|^jq=d9{OhvC{I8mpzw4*bm2H8uNu-j8&w)8%@y z`QV1D)VVurxdP(6*F&k-?fbGN;H)#xN!LKBJjWE;{~0{#`?n z51mUT%!LV!s?8oz_W6}E$k(hX8PVqAh<~o}%OCWe6$MgDJgvkKNEG#YgLj%P1cIdr_B*-WA9wcCt zSzhR_tukzM)=5c18V^1{K)faO6l^^ff4d5vz3a!cD}+!_T0B!>>|R|=Bz`_}xHt9J zKpltn3xEV+;zSnBeaZEJ>A6Rqpi*vLW;@%?-b$y;IU@Z&WA<>K9XdwhLl9B<76`m? zNhg^3coCOJqMP$Nl&!|mP7*rc({1@ib|9eM595i$gF1(6`_`vB-3EdthJpI5 zdJ()2o5q4u3`NBsat1M0?oP1If8L7o+HJaeTD_k$X|jo@_cGg3rb4)~rDWoEr}sO9 zXZV(=J=%sYDU+Xl3^6}RJv6BroE8SGnA@{k-?-1ng_RHcO6ODc-nJ~9*YCkGq#BAo z!8lk6vaqn=)}`jURYy7a|z{d=N%y0hD$m!hCAc~N~orO#|AhS zHl!Ya58Kd!hjbEi?PyqC?gh$_HeDVUBRB3f2rV4nn10QdX8bKPN_$oCWTE{1PU4pN zO66#Y59*FNVb*Pqe8Kl-OMv^loi|n9&>RrM;Ni45O zrCt)z?8UMikm;VgoW2-25j%V+lwl$}BrEPq?G#m+5GY03^+}Fzhku=o_$=Kv+HEq_ zCUtJQ>}WGhPGmWID+4R526$!kV0;EOQ}`9Lu#$$27CmiiEZ|!`J3_i`<^>v1Os{BC zwPlJy%}AdbC?!XhZR27i$fNk<;*@sZ_&D#WHyg58{MM5T#z3cg0EE+MW7f>DbPV}6 z?0xLZ26@GehudUmY3<7&@Tm=dALH|xjn`C5rUlB9>vo`ACo-XwgbX8rHTj(sSk{ai z)g-sSQ$T|XR0Hkz0nDn|1yS4Q?OI6Jsa^)+TE$ z<>lWagA9*YNaUbI+9GdI&!pwkajyMh#v2#phuK8~L4fvZG>-C8*s>Jh%NJVs3jJwp zy49?FW0ZD-%=P|u-DzU^R?M2VsUd6SQRv#C5Z|)y>cOMD`3lLS@V+V5B5F>g@9SS> z)fdc)uaC;Tw^mX4m4yfKeJWBAKm>zaORS|LHxEeepgS?r#+4cQ1iDvRx!r z$`Ste+C{+VqiT0J0NRS<)Nim-Jcsg0=|q#c0q8Q9dc z_|Ck4sw`09%6qU7Q6tZczACEQc`uL|QR2ae&|x;0Y#6^ZTs6wcKU@j~Cnm@$Vtaf< z*+zl?%tqjtjI~5OZ|Ii%8mJD$yFXS89i!0omQ1@ju5PWyEJNuwu~C`;c}dXN3Dhpwrew&66;8 zU_PONhcaN-VqM8PYQRfA%LrsC(n*$OwQSI6dk{YPWRjJ*e6z)8oHK->zOIk+9=5*n zw?{8AA~ET1lVAKXZp6enxe3@QOsKEwC8q8usK?B>ApCy=)%}r#`SV{@OPr&>d8hUl z$KS=EIDVodc&zDSx+y#+UnNHx$4xEncL5_q+P^!drYZfJS&1o^LJ9m*#n_)MOCV&W zo8q}mg6KPlLXwgl8pYLK=2}Nb@QCiCsE1FV>MzACum-%a(J6COIvusTef>tKqjdDn z<;1zTM30JE?gd5B*L|TORcWth$$K@KJ_m?w&m9dK$_T`0Mv#4uUT<630ZmA}TkPHJ z7>O|F;o5HRo{Mb7en3QKo?{>ZKHa)FjpV4Su1Yri#y#ejY(u}a&mz2u-!mYU%i&Ux61C*+zsGyTY`4ioDt{Wy{PV-TUZV0^3h z76=&n@=JwEVH~E}+hhG}Lgw&ei_XhtfSlXG+!~f ze8~z`f96wuWy3dOiiVAE-U)WL-YE)-aR7i z+(SG8HEB2AfR`^dex?WKtmK5qctww&8N}P!`%}H0hcK9g&MZ?*)(}G&7A{|xB3Tdn z73}$4y1SehBvGC5KqnV|DboFxk9Io?i>~dMwMXzs8+-oH>n ziMd`t4!*(8BOEJ!emzy}z@Mqq(<;ZM(vn)oNr+65Sty}1`}S2~YDij=P1b`@PSB;e zjD&;*#&CV6MvB!hVY|#D%y>r~@_&SQ>!mrPxKlCjsPsIadtgP0h&Jk1fNOUJc+@dBevz2fE%9M}(z zKJXGW+*vSBK6oSYD}xkQyKszvQ>O8mpW;|lP=Whg099lYY478yD`KFR08vJYFtpSA zd<5RO1yOEFrnh~;`S@e24DwE=+9E5FEcIZn216NL?ql7M@1X~ zcr+cHq%5rn_jHe`ZduhA7N zAZptIhMDd(RAU56adn-!L<)*-SrI!2_5&WRB5z^OZf)}2LRslrSvm)Xg#}M8MJ3R0 zy|o{_D<>h^*>_=X2ZR!@SHmh`Gkq0lZJ$K=9AMGmUO)MSa$KaB{VOwiHFuMek!c=) zDZF!*da2dJcm3=?)fRdIclnLKx9o>?qezhcTk5IKs?#C9?>C^w`Nkb`!`;Sn>KCQz zz!;GzV|`B|rOrE-{k?52DrcN58(iD=!b%YLga~&rC6@G*_;8+Kj}3GSa{nN?b9;PE zlA7*p7H&N9KUoQHf-w4Z%UonF3(vy=QJJz&_g}BPnVtUb=sMVzqbA-3guJiZSQMBeCgm5n z69meoy2F)ss$FCBYv}uFb0!@1ql_2uj zWz_$}aBK0%;PS#4cVMEhB`s}d0ctZATx7#BWv)F~xDQ74r3 zij~fv1M$393JIyszWEBB9H_twUPi#M$m#$fbmw`@q1ZdN0+gR6YrsuMMLKl~nZ1us z?eD32wIeR}G0ozMF%C=Zd96ri@mD%2NQuQ8x}D!cn!0ptLzBYdP`!~+(Nd<4&C(HN zgiO%x@Vl?yD5i>DMi13^7xAT7Y*hx%kkUZABAKjj@4qxm--Ev`oQN(v^%<;Ayogs>Roj-Sgk!@t$^|nIBF%s{5WYFPWhskgp zQl}(dgw#M6%`_WFgcS64o?LQraPsA&ttG;}Z^_jI@-@`JPqX^FKOXdWcL{Q&*L$W( z@x4>q@_yJ8at{(FI_f*0wE;s%ys!w=*{)=W<=?Imet43O4FhHjK>r;vk-|eKdpq-P)A5p z+7Tpv2v&{D3-AjIaPYy%V;na4ozD_p4Obj^C-hXg7S$O~aULvneY(FJwp)L(#C+C9 zF%F;}fi4q8mzZI3z}K`}6k*s|SCe5hfUNfH63 Vq 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

b1()}4F_5;^i zycScboSk+&AP+Cl$(B3NY0c;NZ#`*TjO845tOS2m<6wv$6t&HUdvXBTu0*;0KG3{Q z;j^@y`f{2X*eG$k2Hw5v_a1;C)NRIa+3``6A1e0uNCt(sKs%^@c{zg(uAzsYmX1kzd`xS~9yZ>}IIYBtx zIXLoEQrUP#;JYY+Cup05%r&NOluY83VIfYmYe23bK%Mi`gM~aoHQEsSOD++;|BUzy zHyzmvDr!H4OJs*+#8YL#dTZSvLpD{iszijVLrq1$O4prh0R`v3BcG5k$6Clcr zKs0FD{TP&?(;gscwhEV1+aJO5Q>+3yogRqAOJil)_PG1)8e2!>0a96<8fgSyq59YOHMuTRSFKHvF$kW`Bme%H9AYcK3knT+3f92 ziPHL!R3&*~A#6UBw_nvaFN{uG7O2Jp80B`e@n4`X%%WDh};*)g1MiBWf>&q%+!2m=KHI8Hb4UA%1G&xX7ZG+g040J##wzORFi(+=E#rTIEgS$FfmVVn$I=pxI9oKWDLjw#s8&xxK6QeYqpkp21{R#))ls0SZm7e-3@$RPD@ zKpfFQ#B$L&2tmn}#}`+i#SP@0s5HnzVP_3@AIXr)wpnUAUI}62X9@&ZK(3~v-f5>7 zG$zlZqb|wznt-m!;c;o3%n)976u!%a$3U)GX`0@svFZ`WX(FG1d-xP9q5+pF(-IJ8 z*P3IsXOo)Tv=q&GdC&K>Nfx8^q+wRr2V3R2{cu8%ebdHIPGNDPj0~L*h zg^2cbP)$l=IN^Y4s)3q!;p(h)CbaFz^LW&M6n&6?XvV4uAgvDI1ap?s$P4xidb7vJ<_Nlp~2vR3Pd#WgWV|A zJp9?yU(*^on>ZBw^g$8HU#DwB-adZJI-(?%EkD5czR9s?_aj|Q^!>SH|JY}?%Hkb} zk2L}jCFNk5{D(?WLh%#H6kN&H3P#u||12=Gvm$od=!;cw@0l+*3OT>Tz-g2wv4r)D z2b;kfTLrc`hXgZ)U{8lKUq_hR5dWDL} zMqjX;%sMOP=vcXENmwQhL{u3w1-^8Bqk{3q zGO5ZlVB2(otO}%(GE;9{GVw~xqvA}lU@V)~LnMnTkk7HDjQ)m3qnb=|)|BV)aj0zy zm1?l@vNCCgsYN`9ttjd95ezdiwP;d1ue_VQSL_1C>>a?D z!WU0KwvibyDcJ}!FbmIZxZ>2Z#ZYV^*IMlVHyHxyEdmZ1NO2gWrD3-xCcwgxh�H z_^F8~ge;r%9|}b|g%5s5Ci35ujB)~>rvaE4^a<|By)mIgvRr?g%qe`0pg&jAbp6&H zgBuC5+B1%BNBM36fZQ%Qq=-!1j{WJfHdZ*d?<5ExFpDUfeABtQ2O=E&p2DRT@$m4F z4zl9lb%akpLW6I?MOxdPshEAhM1e21i{VGCf*wxuDBvsM0jE+IqjLTm5F3##9Y$6T zT7jD;;QMX1Y*Z>_xZTQsbpc#g1!frU#|3;|8@^s?i2-=1h1Zv_-sqx;3A8LMWsY{(i-%


Mcvz*3zz8R#eJFEB8>EuaN}_9_PC~m z+BgA`g$>VHfKfG^NV5a-iYmr4FVg3|w0%l}o^sZY>bIG?vC;qJ9YGQ$#D z`D; zg9{)TpWs7K%{jo}aKk5JUv2crpQtGTWnNpObY{Q+ot10@mzfQq1x~T#W%Y4rBevny zg3Jxb>6JN=Cu)@sMq0M*88IGA`q7w4h9(PmX+mgP$59F>r3SV)#Htb!5@UNOhHY&) zBFta|N0#BEf37wKG1M>6rxB!>)4-||jtt$8*JO5#Z#YhaaK8(X2@x zw?c0a;!cvNnYRxi+6^b?k#{Exd`Vzbs8N;A1*Aoz?&(S9L37Seo%Q8EBLtVacSo;dU;m3Z|$Mm!?GolRL>aJ-xCF@bj-}MfF4?p3s{=E2f~d#lO;MjvR8%iqF=ET zN`dSAl&{u~aBv(AJmBkNqd-!HLfpe}5_WMSHi)Id)NV!2H}$?l$8BhmRx}DA)QQ)< z*P~Ulz~aPt8kmsDIrq0%N&_|pMNB}AB!DXJkN=2tnsSQ8BVM##-ns;&|1qGmEY4Nf zU&1DR`I02W;GgZ|>p_UKH1LEZrIDKk-g&1Vb7V<(tbL}`OsE2EYL`)2)PhLtTRtJ0 zty~(QK%AHDh+8K>>eG9G-A$5r&tL~`8s6Sf6AN50Bh-;&Fuzm45d6dY_Dq#!KEU>F zuVyKR-Jr8p)1QKJ5V{bc2=2OIC@6O!Mg*vR`*EBlHJ^;OwO})fBL!! zoVU$ZTUlgWTUiT|-mr)T`NNf`DaOS7PyyTj^m%($c;G6A-zH?WYRcb-*d$n)COE)F z|1~*KUItgeuNYlv0b_)6|H3}Q7#;|Da-V|c`Sl>*-%6pFuB7}0#6w?H8 zk6I(ofn{((Y#Fv66E1z6G-AmUGlpj&6bcWc8$YL)3oIXC?7W^he`nq-vK#f*LOn?? zC$*23eAUY9-P98!1G4{kN&fpcUm(L}h%#DxA{qJ$)hm$o-_Q;_cHXB75TbXmUPWX5L+S`(*~xpoZa&f;<9W+iqr=3?&MgtYSUcA zutHab09C~DF!0kvbozqOQ9FSfk062smL)i@%-!&iG%W6LeVag=N3WJ}1)i6u%gf8h zApO*ghTA{lP&~ApO2kVmq-ac1k;&ALHyqdG&!)(qk;QC0R2YM7T-w|qcwF!M>2Re5 zNHZ9oaGJg!f*Z1FJX6UvDx?1;cUyGypl+GdMGRx9I zLwdfa_DR)}qY456WTj+D?+p?kWP@G-oWasBw&yV@Pytrgl^&bO81xyUU_uf9RKo1xrv zKA64k9=j8YRVn2{z0PtE1GAr$ePva${vS@!e=COn{F~^{eS(A0Sqy)J%I_rHNn27O z3r@0vjs)EAq(d2piw`}C1YGz*_`F*N--dQw*`$ju2uLeYMqrF?GnK z)ivjS`r?(3KfDyw;N#6y?_O{S)6+_aeg%NbqNG^BdABs=n`V_c-Qf14lKOi{(qZ@b zQr!RHvYEYoxlZGOw3L+D(IIf@uA&CXGtGq1F3-cCXhmwjt3CQyYP#=Z3VQ&F&y@>$ zm~PPfp!m)|BxLLcS}mr=x;OeJ(7S#R)Ies{8qd4VD5dJ3?eKKj(Qs}fF1`gHz2Vm_RLFJs5&r7p(E z0kMvU-i5yTin#3^Xm`2+U&6NJ{iiXMN=PFXF=GT!CEL0HYx|({z{{EZ(OTvgNQ(}P$!AA;`V_Redv*wdwNvhCuq~c09)Ju8#TXVQfRZLw-a&V7yF~8N87wYKOJBNz;Mc0D zH^J=7o(_vJSB+iFpHzZZsBP3_cL&~o3ZxQn9mLTejvN8s*h(nzqA(ac_wspD4UYS* zFUW`)?5`0^oEFFi{dwjG>|V}MP7OHkQ0N<=`{SL1F3Ns;{KbxSZr`M%+@kygeoK$z z9)>D7QP+J4A7%;7Zr~x{;)?kzxveaJjb?{rv zm}uKrVJ6A6KaWHENzNU8Q+(oYb{;3^`Azc%16~UawR3;cV-gvQ-n>Q0eT)k#EQ z?pSOfKXgX4f9rJ<1$D{AAEeLzV!lwMns?m2(~D;#T$P!BJgKSTx+9b}x|BZ3ld%vw z%0?E$JVE=Nj$f;8>#XJFF)Hhb%fVui!E$RD2J7#CKv_5wVkkN{fi(gF0l`_GLYD&f zWdhD>ymHG@X>j;O z1LT^plvf5GIbMMyTLbq?rNww2P4>IkbFR;6feLTl44(x_Kg{?gN)F5L<&&J9BCt;= zPxEZid?{ISb-d1*c*_xFygOZHP`@B5y5CDZD^*AHFd%Q<98^AHsG9VRCLkaCURi7- zrn`Xo5AM&hn$9(M@yenK@h@2N&UZr%3@c_hm|ul6_%Glh5QXKZ{|>uFX_|; z`ddru0}|YV5qq_V*gYgbC-OPrqV^mB>+nwaaJqziW=r-h2p2#7g`JC7`|UsA%zt5* z{|IYZUibhOwFiVdW?wA0A2iCh@y`AF(Siq&YUD;Aq!#px8;XzBQWy>RMDoFz9opLQ znAy*E>VsdbI-{478iQBom9GC%-X1I|OkE0*Z}s)cIljZ6}LY9Kx`c11f% z=D%5s337B^}eUw%ZG&LRVs*flM3YD2j`JpN#qEJ^A0i$in|MmK)Ks%2)^} z1;A0Bj0>rope~crqoXVb#QHWBI#`y!m!a}JRZ?$oF1p{1aXa7rA%rO5fPOGg3e>Y+ zFd7sS{iVPBt7r?xJt%ZvuW!@t1$emH{gD4eLF_wL+ZHGg z!BB2F&pR!iZCw5qXg6K&i@o?oaLCHkLCN<;6sQD-Afn>Fs`K9rhE|0ZfpgAle36tlB5G+H<}Sj!@%#wM44_652iMFg`wtZ|o<3&)>-Sw(wl zV*>N-P^8<&RvN3ah@qT%u?-6SE)B4+VgQYY!pW*8P$12wij#qu$HQUJiACuQlu&WR z5=wI7|KYCxzaNDbIv>!QOs)&>JVJ+pq-^tr$Kyt{@Q&Z$A$zQk8trx7QwZqhV*n0z zklJXn%y?#UQJG(0Tt*-iM{iKH%xm@$QbF1Ik*({6z}EE|P6IvNd!ZG#@2{oxPF~=^ zTqV9|OV)PNWv_&NSeZBE?qCS&u477n&&;fT%-97hGrtNw9uDy=wWYfWtJIFn$d@g~ zD(+hzq(Hs60CJK$*-`Q5phQ2=*F1!sLFyf4h*&h9-Shj?mahn&4N&NT-sEYnLTU_X z+&+hg6KU0IllB4=sk{?b#k5Zay8H(PswLasgaH<-3i2aA2PsaCfG_a!A)(B79Nz=- zS{ z(du|Pw|v8$k^yfi^#y)QH}mf%Ef`eE+Zwri-p=%w9JK|MVb|AfGGU|(%4$p6Yp_fLkm8oTtG_nfcQq*Fmj$(KgR|D zH^B(XE0*$>5ZUtq&OyCs@9FBM!x_rGiR(2)^Oyzr5@cqf@Y=6&5=Xi&8X zNXuovdGL*A>=}3opIu1={&4UlVj{z&zC0e8lGPHhOFrGu_}Gc-KD@M^3;4h!>$DKX|1$4$-lcSYczWVJGpNCWZj8j~1$PTD&)l0quQ) z@j^WkPCYc<{xsYsDxeIsejh)6ba&4q4$|?5?40-A`ym11 zuRn)$M#0X@FoMNgn#GQ)QRvc{ieJd(tJg|dslCZY-|OUDrII;}%0~|ayWQyemEW7h zro4}3Drq2pRY=TR8Sr5>4wW5=r)#QWRfeWlqWJy5^$gsz#;u*OF2k`{X5UQPiPxod z5o}9ow1hluYund$S)fbicRK#{VF9=B4uIyekZ`zF4M=Ew-|Xed=XqUOs97WL-XKMO z^ZR6oyAP1dSMl%P+T$Lq(5Hi1iu8>DwxaJ#^9M)d_b}@s2;j=91ahIizW!+#DssQY zWFa29>vDPxcqm3ehZE&L@n@mIW#D=!l~D7~SioX==z#N26EmGh%2 z%_n-PT!8-Pe8g&P3YV(|Gc5@?E8zf^*?w05V`0{H>qMSy1`+)zf59FfEiqjXcvqit z&)he&*OvLcz65>f4+U0=sZ7lm@BuK zCfgXe zpM z&)9!v2?#}v;fE#Ors&|LnfL(AC@T?&o{j-}PUfdCiZ=Zj;C=eQw(qG|un`S%cxY&4 zP|%xd;GQunz;gTvZ4S^ITd0;eYq==%f`T`@6{DczaeN^UlsW3bK(X6L5jD7Dt%|SF z?eCe$d!V!!cqrWxLLPB{9>UE?P!X-cNWmG$otUn2jkPuAUU#TEby?9 zkTELwKodpqC*`OAHWY5xTYfiGp){hES{j8lUtDFLz@JPnr$zQ_XnqZP@ z4>|ks1L9WpBx7mLZ82s`jg?7h|E~QdhH6k=IsS%<62Y$N_wJsomvw2|iZ6E)B!fcm zuOVl7Fx;==ao2$Mm=pT-6cLKp&IOX|7U0yudth>sD4)MN8noRrC;q$>jEmd?)KQC- zW|4(zW#WL*%o1AA5E@UgZ5o`bve^6x3vmP`%v9lSD>t<|#AT0s0;w0==JI>nWUM7L z^Bp~4ww-A2noMtbVG6v~5eWFsuaOuI<)`9ze8Z?xnCG(UfYfP=FQ5S?xlsNtmVk2q zYqBWO3mtSAqGaeKjVNupWL-;eF2p+V|82MF^%OxY;iwRE4~rh%HOzEsm(xMSsL$~J zt)_m5Te{6zYMC6WOYC65Yl9iSlgGl~zEtIFHcTx&m@L4ANyPlIeA;lPRIkzZ`THO5 z>EijF%pWS!1s5%)dBxx!B$VsOKKf=A8}-gDdx0gDLH+poh_j4lxqT1w_q1M3YA*H9 zP&w0~4csFyz$smi%>$B3*^=nF^a}{WH~iU7K-->y&XvJ+x2$V7-)@&P^>-lrd8UH9 z1pFZ)8{rqKr|{?V+*KkTm!*(<;bNx!FY*7s zRfm5dZR8{be>2?u)>7Fr>y~ev4?uZlmPeQpr-h%XDphqkJbP%9S@+W#b|lT`eFwAr zga)Bo)y|cK?NsqV&Ljxz<={VRREHqykEAk=AHsxw(!XZai7a<5d0Q!$rKnc^_$czk z(4*YF`zs9x^ibDF%@oWh-AjdgEW}hsdJY@?Ba4VY{F7<4CcFkKWny4Xc&PplV84rf zuPTKY8GFq3PvXeLboQ*8O9W`sgK50|GMeoCVeR;I1L2)~w zs)I2qrhYG>fO`;(u{M|LqxnjC4m- zX!MpY?yvf5D27zqG;2SH{uzu%Fdpr5)2%E}zpW?;{2cte>i~Z&EnQbfrJ8pyY>IyF z{TG(>e57p4sVwt$<@EsK=%WE@YZlewq!fOaeP-}{eZ`}d?gj|avGrtgC>HFrDZ2g{ zD7lEA&&bTYUqW&c8O6%!=<1rQsEBE6I^xF+U$1)Tq%9@nv>oNCdbHB9em`glPSl>! z?04%RaoO$TC>T7h+FZT2+yY}?wD)s=M5nW~_C9|hed;N^PiPm(0xq*VVN06O7BJSPh_eLThxqBDA>E=CN#uG*LwFaO{X#)6=YcYv@S`X~W;I1H z&qxoZFDD?bH0O);P6b>b(l#s(ebI=MW5>%z@=a54f6)~spZ&8;ef|YB)J}j$X-Qqh z{CRm4QUsAkiYH3%fU43Xfg|(`G;QC(q-7s?NiJ1?i8_e)t&{6cQB4-8+LL)&^nbfz zQplhO%RzI4_o0J?X14?(_v&#lUfQ;ls^uT7{J-pG|6ag-D8vxzwKc5?4iae5Y#O2& zRifTuV1S~9S;42;PeT=eOFWq_f%XDCeSK~caO~ybYOBK=CjItWaMTh)cLQqAfgZrR zYH**yzIQ`QOS{(>Y=f0zo$T5zr`Xjsf?51|brAOE+f#kX?dJ@VN_u*F`;rrSh3isR z9%f93S<}EILx{$XA_$0a_k4Agt_1+Cj}PlT4N1PZ@Tj(dCwFoXq;f%c~s;uTs0+y~?p4}+H1r{cxtw?opCzL7*{|&I%)qdj{Hi|fs5Irv`&+&(86d`&boBJI zHSqy)aU}P{xc%k{LpgIi|Gb&;^S~%t3lp2yI~+>>C=0&QmH&Vg{|k=%I)*Na^SuBC z#<%yWUNiNT)$AKdN&iQWN=lei3T;WxKrSpUExc;R@_nW>w)-@>4Q!<8_sHuf82&%Q zfgu5}db3yKq83<)H3I_$LT>>5zuVW{H3Ij%0RKPR`Q0No&?@fPHC?V?=043kTJ7os zEkYH~ye|r-c}Zh1@=rUk=o*eAPe3nQnrlP^@3;o@57GDMfI=XHAQ}!C*PDGX_v8u( z{>`AS(0}oKWLHvVK9L_UHF%Go!Nte$0SI$%-3$C8d5h2`3#{t$N002tzLNj#=l6B- zfA>+2jR=KTiFLf|(?+I7H3vfl{YiWu+`~PABg6e(#b~Xa!3%J9wOH)klSUxd^txgp zP#(x~S*9Zy#>&=BSH?3i*9vB}Qqg;mdf$Tq>C$`%rWVwtk%ib7$q)fM?q$NKqOy+A zsWMkiCWbAEuib1U+VsltEIh*&~#!D=vZ55W|-@)U6f9B3y>pr6a` zXg3*58gVVrsvAx507FW9eY!`-eQbSTOE0VOS2!uBw0m!nPIHrSz_DDau=ZiRgBq9; z5~aqL5Na_1;LCo0p3fDGyP;r#A%x5eo7qYkuj?&_#!zqi6we2L=YZ@5eSo!%Itbt_ zHUX6F9VL5o=fP?Z0mG@e4-!hh@!#M1|Ngex(;#~PVz8%qr4s-53xM=C4d{H3T%4}- zS5T+SD`{#joQVOU%g>Z!sq<e)S8p~Y=33^kJ+|;c?C;gln(-sSle0B&F1ZfTzF*SjOGTG0U)nW*k z=}gE!o2J3Znbj902tRY~3?+3d&%uzo0RT0%v+w0OkRG%{B552uWgg%(boLc<3%3v0 zfTB3a(g`KdxeEl&HtYoq^(mAXlh(+aXaP2qHL=;XceqRVQ8*M(2!&eITwqc_sK zHV$LA5$uC04#22Wz`i%&ftA_m8(^2OCwhb zB%-&e!k(2uOI!l)RpA(ypiXL>VwN=HcDH`r2XW_&xGfn;FVT|<1CL27SQD)#`Bqvb z4nbdG1j4AykbeT6Kk{BIyeC?~IaVcI!6u=Ig3}6~+Tm3Gngd15U>uwFzc@FX4)hOY z`chW_k*wVd+DK;5-`uDr?cij<56=81{5KVY`U0=zfEd-b1(VGy#QSEC=Y>jP9MNft zkc*1=gbuh*vw#3zhx5qdZ;mYg7RMQ++1!^TT zc^8IRLvQ^&ll(O0*|88Df<6aB}*dY@5wi!^+xnYQ@im6;d)4Ys~ zZ!wGJSs0K9!HEVYX#ol3_iQE2oS>o{~ZP|7gh-D`F)hZ;KcE}nV&|W zw=Gw9O;UKD0+o;uk5c_(ab5ER9Ci0l{?q>b88*;O@a4f+e^IcY*{72~Oee zUJ%^f5?q1?2%cbp!rdXbyIbK7Z*#tL`ki~b`|Eq(`-f3uC)6lv@3q#PKbsHqw*|0@ zL4Pf!6Ijgde`Nvu7rR@4;)~-v0{~z`aT*?s`R9KSVyN`Kb0ZIj)g77T_?PfQKGUhI@KoUBAgv2B0#1Lg#BfSOpEQc%#5Xk@i%K0zbR=Tt%=n-PSDY%xZ|_A1?E5 z_$U=Z=U-7o^{m>{TuO8gAXM-;*DAsPX?yY?s~&jK`w6}jc5!3FghjDqf!Vl)2YrRV zeEYRQDKqeA#JpNz?B&VT8w9j|7bZzCFQ&zN_>cU=$w=99kFt&aigx?I-LF&Oqe9S~ zODuo@5l8}qGDX#_4G3kziJoOD0_exz zy}Tf=UcK6B!&r&{1A431IZH)8&TtM>{~u^i;Eg$9XqTkPsh8f%%O}7hpzee>{LJv$ z(BcDbl|9PJoJIMUdNXbE9qo$ZX$8uxAzLC2@&DTc@UOesn+Z=P7Rc8NoC21|jlaLZ zTEBmOmXGlK3Y~QM0Oq`=&I!DB(OHeO1V|;6*Vuvk``;|pzq>AmN&O-=9vf;Dqueq6 z*YmqT>u3G_f@BX=`c(z{K16%*$`d!$@W0*8{_{irZ&!XY!0Z<;H_0=Kz?G1fWRmJ6ddf_~1+bKfy`O*z8NRKy>fA z0%w%M^LP6@;YE37cjWKF7dGmf6@~G{|LYp(q;c>XGrZZ~zp%PnmBYiU=Z2`)+Gm}pPGN}&6xwVCyEbGiNy4fJ7hz|#-F7Vq|_ z-fFz?fv$)z5}TL?4;KPe)%rNo)R1m1wk8BzW%cLwH7zOMqv`Ay9>Qlnu<`5mV%#Y9 zVmZ(;$ivuA34LV7|GUQ)KI%m?V`%eJ>DmdwapVg8AH1k$C@GHt=%dNNPJo} z-~)lBwY#nj6faCbk!aW1F0joGYq8D_;kxQ}I6Uu$tMJh{9txgLm*B+ww-4ERf%2@m z1t$09Qo7L4(3DeBM}{&kHe}dPw!AL~HPGbLVi$YrTrh*yRtVYLrnR)rj-2R<-zU+0 z%F90)V1ZK)1L*Go+E}4nL47E@!JrVH7^47ykL?0=eiCk!1SArPB1(I(@A4jvt#@v+ zgt{W6S^Gf&r)7KSi^k~N2>^B==Cw)L2(k_ojWq@^LQ??bX&B#Gg1NfpvP`x-oUc=M z5W#2qAO)CQwm36>kplvlgsq{pJ^&GMVGsjYzzl?S-oJhL{6E41RLWTH5Rje169>`= zL?8p1++7`4G^IRCyCZc16Wys!+wMri1oepb&`JQd{wuTApHG$9cA@Xw0aw6nrq*+- z0wD}6B55~9{sN$`L=#S?UuOZt4E{KQI_*N;Bt`W$<_>CysgD=LXC&L`vYTMgUiEA& zyZm@S6te#+P7hhE(thp+5C>k=yw)@gm9-{S;{ErsM{EnPRdN_mp;jYffMlK-$D82O zDtKutf-mKwS6}NNwhP`RzC&S4=;?Xs3<3rN$T^v96Qg`G8WKzYR2?~1nbQx)=mKd_ zlODn%hdX`G2D>L(Z0-`$2@J9v?YbG6yBW*c6!L89Uh1@g5_kAOz023oKDO~ev1 z(w+y*uc`z-f;llv#f5M}UEKa;Nnvnb7?vU1o+nVk|Mt28;yNQMBnaN956*8q5MY^h zG-{<7H?0!?mit0KxBEf;BreKn%^Rmb%7Yz!I|GMDMn(p8$)kfEx4$NSH)0ngUkOEuR{j+F3!%d>S2@tyrX4DS&!tyEOSccs>UK5uBU7S_w|U zfYsI?ns!kM5eswoW=Uqy_3A@wcY@>vh*y8^z~IYwyoY0JydTP~%~wq2 zB&HA??;cDRC*NOF@E{*=Sn^~)YXE80i=H8Cb~SD_k;6mUUY@LZRsI%W;>5ym{tM-N zE*1P2WM5!0V{f&+27sBZHr~duutit(@>ja=S=@elrl9?bT%fU*k$VTe4Lu4nKEd^U z4HCV^FC(Wrk!9^YF_q1?h<+FTLti30F;dh`HHPi&t6JFA4-I-ARhw9KdH$ix`Sq`w zK=nq{RrvjHl1J$Ji!pjO_qtv&spN!7O|jBb8xlu~;VCn`J1FPE{Y<4U(IHU)WPX46 znD|yX9&!m8Y~TD9?zHNV5!7mJg}hP6bn*H_Sy7Pm%&XN2y0;D2aj(c)7^f%7B{oqN zZtOm}oDXc{(J@{A1jUHrCjVG!qL)L_*jN*E-Q~mo&SxLs@sTSxfEdd8K zU>o`1dA^e)@Fk`X$OFyD@guao1l9qtLbj-5}SV8^tA>fn!ZV8|7 z_tO{$G%sZ6jPvJXVUe7<6R>$Fj%R01@$6m?t-UCs?Cr9fGc6Si)BsOdr?ZmVb+$**KN zLZ`9%@S8ku&M|5T#q8)t0Ya5o!}UBFseQCC z#+@9%aB#skuH5H3>zR1BEvqhw-qYBRG{YCmCHI*mOMc>uv4$5BPuP5wv}wpQ-9 z=3iNSXL=#BIQAR~8~gciuI4bn!}={01aAr}2q}>g>=0BUQwZC&1lojhe3_z1H|vXf zYbi+mBbc+dJ>8mdZDz-t&z(nP>R(~-@2ISCTj4@)K4Nyd&CU`Cb1CDF6e$nSxQ5AW z5YX`XOiJhOeJ8ZGyLHPXOQ}%~H0>3C}iG|&YX2DHL1DxZrMM5P$2U@6 z=vd<`JAbSU1lo?~X;S`6NY7T1VHf}yUkxNzs9>$#m@d>iS_(*E zW07+MYKEzAlbo3tFR;~GnjwIr!jht!?5xcK%C`hotF@i~A&LZV=eoB*H6nBtH3$S~ z6bQ;RxF3I)?Gx;l4s8Y0`(^Dz8kz5tUEYMNV0pYJ;fn{()1lptET19;TiKXhL+{a6 zaZcC%kFx-g?UffZmMwl&fR`=-zMGo2@AFEmxH-oYC?esrE1k`AZcp{!1W-)Vi5*oZ z>Z1Uw+8KLA9L+MZWOWeEz) zI{>|yzGcmx^Lh|*@;B^p`_tpqos~)59@(Fha=Bwr(`2ph{ymiGyIq9fTi`+#)3O<@R>E;6u-fel4GfQUH95IJb}&xP+oX` zmU)6M#H_>FV_4`geUb?^m!sRDU1 zR}Q}ql*ff~NXKEV2tDYwt^8fBf;e9&`x8=%mb91xktc~dE0E1u*g7j2@jAVS;UU;l zG?+^~L}#)O(3n3J1; ziNYWrW{eTaxh{;~4{J7j9-fs%*n?+jbTp`;0Y6tOAYZ-N%tQz4|i=&5c5blI#)bLRsm%-S*pk^e-WocLj) z_`BfHWfIKXW5ec%Std-G(Bxks_Sr^Q3<^Vt$&Nicfd>csQxP`0XIQK@F3Q zKRY*w(UIj(1O2vJ=9e#TV&8=)nYwWm_jPETg} z^^F2P`)Aj-Bw;>fB|D+wwKt9>bAdvNk9{a|KfMPDHs$z0BrS6S?;+TUIn7@_c(len z1wT~%TrH_d$oM)36QAa*8RpcHZiO5}6h zk1_rc#RQLGSY&zfe-@B8_G4W9hQ+{gy12kRxN^D`IWqGMMs3UKI z?&OPy^R`v@J0w~pmK__TZXLhkQcugJ7ioV6 z!h1}gi5fuxogW{IbEOvwKZZ`1Jb8Y?EEW*2KNuW6;kW$r>hpZNg{ezejwIsUcja%a z*f9bm1LD^_WfxO64ci25E%-4u1u zpIEY2sizjOh{ox%qcWQPzfq2m!;?oloj8(>}!!_z6a!;gi&OnIT=J%G0rbDk+4@J zCZcPjyww$O_CVw0P5iQP1pNUqO(v5*s!xCga~BhYeEqjLVB8`~>z6mTSJ7YseV8C) z97X5JJ6QfaKMhr5WF!ujTOGsr_;_u8w2IuYGeE60*P~Ay)^MDE3M9XscFb7W#XV+h#agnX z?p**frCO=q$%I^ETN%d~!xrL$DdCq4ko@VF7Kvc&0hZ%Jgv?kIusvl8^f?TUgA=50 zRNSluB|tMFS4dDdv@?x|6?`JRl$Av^p%?4IF_W#R$Cc=T@`;b%n$BKC{per1?lbu# zS@9td_D_Bw4Haxd82P|*zfo6tV|hbTmvq(I+?xn|9QQ+VX&lRdckxRvr3L(h&PAT? zGW*Dv6wT;^U%i5or$F5HkDENsmYSA@`Q+~4Dk*Io$XEG=E(J#XxiA`IMEK{IaSupp zRu4EAY@!VO)_2kaTFJc(616}&F%AkDlp7e1^yP34?N`s%$Vm}Cb}K-ZQ~wHlfKBUn z2Y)1}bi7a-QLi-GLVA#bp{Av9e)!u#{12u*Z25sp_(Gim&8d9MFh8WP^75aDjfyZl z6>1ac2Hy4R z;=onolR+p)cq@afqw*?~ZU42ac6tbU5YM-$vODPp^>a;=%R*ANT1Sla{C)hzg89V7 z0>f#U=KDxRZPF#JO^twMQ4m|BMjFm&*G(P8l1$8JC_J&l6Uv_=LC^|B>ycv}OAfSV z3lWDslyUuPSP}KrknJ1I#T?%#cl;COxG%nP77k7t_#_%H-?8HRhYCsW@UYo$w&^&B z`P=WkhYDk>1;-V0;P5MMj+LSkviPo&j?8>xNl$j^WV4nneLLkfJ6sX{E4{@r6>%|$ zWe^zU>ee%6(zbZV|N{IV=+ZW5c?r4*? z_FzvvgwNj^Mv%qEh$gBnxc~v(k0dyd`dEF4>h!MJ#5G_~-WnJwpQ)C}Bn|37c6{?^ z!HQ%ngSVM~+02ZaTc~C@RamyEvH9xpP5@U(m_?7`PPxx(%mN{vGD;Q;E<&>2@?Rr-tp(kWZp1qn@XLbrEWDh_pC+W_xqIjBj#Zp>l78bB#Vq4%>I zTe8uit3T(gzvmFFEh0Npl>go$@i(_X&h+K}Hm)T2-d^RK_ho8UM=N(5<+LcoEKl_a zusT8Y1~fp91yj@>%0FAVIR0g7`*-BzKVDl2!c=oDTV+UzrMUl*W3X%lHaDLihiA}) z$jb$QT%OT*PfB5=1Fn}QeJx^PEPD+o1Fmbn<=VrqEduseYe9aY!)E)r6+q9)kOIh1 z*4YQsLfqW=fBNM-!Ohdk#!MWl_&%r0;U7zQ-41e%6s==`XS$d}824L-(48Gpa4oQp zY0%rBqyF|@AQ-B+^TQV_1%|5KiBmGpt&eqMz%UK&W)f_pc#B|%1AeBl*UZwsFhN=B z)sd&6r}b9*2)z7AJCbc4ft3WiRCtKW5fd$*=Qe=ZSNK(J~>-;Irh0GhEW*B44^_px= zz-D9)TAdn8hF7KU_xrh`T|JGI0UgB@g!=P^Zutz>{IQoMBG5e&IBgm2XtxP5BsLMBn3nZ=T^8qC_5CZ{ZantKAuh{T!vkwkl1Sr%p&xWf*jV zco(blL=Bj+M{UMlxB_~tJ+#N=r%QM8zL;Y;86g3Tb~|fEB$8#Sd#QUueXw|p@TKPG z8T)YeOpd&#*B5)!(_@#Hw}Hv}$evG@B)_QogJ-60a6`uSKqqEF3&!wS*j3t+3)@-V zN(kS5$Ai813}D|^#rz$qQr*h zc*?>|g_%}C#a$tmk@7Wb#~PLU0_^2Jc<--U9uDmV9#VxxEJmrG)B83T&W0yHbCSHR zXu8z?tQkD6E`;IF`ZK70ftU9NHpx(Wz;Z3AYsvF-1ft;jIoJ7Io#S5mK8ae%gI%+J zNmM8-aui&XT;urxm{e*^EDBM8h=k3)W!){+SPGi*0WhFk@M^LC9XXdhg)64>mMpPV z3vTXeY#5`1*Nm%iB>-(=7x9*4bT|^alPpHcH`ifH3jXjRAqqhELG0ex7Nm6{TBoeP zH*hb0S~tZ=z=LadWx;?)dU96Ml149Gy^_uhDabH{fBrGnYgp(^(RScrCoi^|jc$~B zG>%%58yzsYhkF{)i=Ff2#!Svm6ZMaw^&_fJ39{549(ZEA&t1A7gyv9K41{RDT&0S_ zFbzXfPV)~rv#Efo9+*F)ASxG{$My?&17B3DPk2(sPS8{KN&Ugbb2W*V4T^D4*9vS6 z+Lf#A1)D+yDFiWX&K#PEBzu@61xg+6{g?0gujZXTx_M-J@K2A)h8=rkuP(h{#ZJic zT>=49uj}8#ev*FiFk~0uUV?foE>GCh`7;Rk&yFtG zHM+2&qZ3MtQ4u<JC@M5{vO*Y@VOa#E%o9`pBsIp04DG8V1P;H zR$?VIJ_lQ2%B+L?u!wRGI2aPC2rRQ?sVIWNDnJa!&hIj7%~ayY>Zs)(VwRFmr4Gj9 z8lVp+MDZ0p`To~(<}T21cbpfXH?ht6kq1Cp64yhJ$>A`ra!%iyKX0-W=Bu%C2771^ zM~(v+MI=)$w_TFDV(*KV{J9<#&&Zw2U%owcXOQY^?Fl92C_fQ8U}s0RUAk}DL?+)8 zi(MgOH19wiKbTo|ibCz)*#^Lvjw`2#-GYpekW!!%ANV~`7t@gAh`eM*EswzsB-OXK ze%XJ!oq-3|l+7@nqlTozTN_jjr=OrZ^&HmiBRg?xira)+#z+wN2Pv}$IuH?RsH)~P zr$}yCy&tfS$x$_&C{lH+vqy2{l0lQ)LCaNA<0vhDGlNMfvf%MOit!(2WO{+_s#bbOQy#kjyb z7U&4p>G42*B0uY%x>Mm;k7R8ql1kvO^Y*+_UF8U>S}kS1368AbtE+^O5`KH|ekm`9 zwRvL=H%Aq50uE!0l=tg-gG&Cg$JiO(j95rL_NNN{mNp31&1YxUcpUe?CEZ!5{F<>e z0r8@@H&yKn_VM%3k?Qbr!s@5?RAe*Vz?`y|hpS4GGp)1drCiwH)!;yEv{@Scs zvjDSoGkncarpxdnJQ?kQKg1Gxpb9gB30&313GsW=Q6=?MLISxBX5DH__bNNi7I4wHSgfx zGtd|s#;p%bZ|a0bpFim8NMoung;u5_F?%Hi_7YF%kAsQchx zPE+~pB*cKbOCS;D`1Kr+<`pR7h0tg?{bw)n_l)VP9}=k|NA%bSaEf$>&%^C*(JxN( zPQSm-csk@2X_RgjfTqov~0*P`%?x2V)BkIP2LsL{+ouJ2{f z8IgM__`p$H$`Q6(u6)9B9sfokmZADb$qlVE6ZD<9S+mq+bW%X6SKs@ANps2|WgER7 z;`h^da}%l~O^otK6u`J!abXMe8%mEYRl3f`rM$K$t9AbhkuDSjEN!{ZO{sbgZNdGj z2vgn8RT?v-hB9s4>C0EX#o0odAr{wup<0SPK^LW^%zf`h;+CJT7fBa1k{_y8Qwg^T zXzeANt_6fAk79TA#?Q>uIm!}wS5nZj7vm4xBiu7B?*aKi09KYE)Vl+T?f!Zx=g~jJ z(#e4y$U!PGgpD;81W&OJgc7(|Ya*kv~RM>nm5qr$^8QzcT3t;(`d! zMv;x$d953KU)D_)PlxQ8kVZc7((uZEn?& zMSY`U1gzl#sTnFkl_ZC45>z`b|^Yh(2eK@1}NvCUVCnSiPp3>;{UJlv> z7XHd%(d0k+JC%+9oR}E7OGbLNfeE?jMEwrcQ%#vx?Cr3+7^V`9M`|SKB zv&$p9EXhMxVteM}$aU2Z7{m9OtF}*J7~4Vw^_WZip(_zSV&*My?GjOk+~>p+6QDT{ zr|zoFqNr1Waf}*@*OWnZJv;C`FPkKtMKelQvm*CNr>pT#a!1f(Dn_?ML?(VrIjl5_ z!5mXNL`%QiAa1ks2j?0^8BE&-HCC<3k0gX;2!Akntj#(GY)oG38hYePyyqCbiSu1(6dR@{IkFH<#?h;rB zBJgJ{H5vU%`bJamh*4I{chFGaQ!=9%rrwl8I88dH0B1Dwa|Y|Oi)y`$_cl^ELa~Iu zhkDneK{Q_2hcx21rHKA7G+OYs1T^d1G9kBnB~BNU8lh1!A(;U3Cr!YtxuPMXW5#^( zt?5Oi+8?1o&+MKL<}y`PW|bMvvL_8!n@hA779H=v=}BMW-M{fg>EnI}A)BvXlfPN= zbGP%tG8iU)700%=W!+4fmbY~5|9&7` zv`{4>$FSs<$a=qe0W6O`PJbv+llIf0I6xc zv`;B_szu=8hk{MRkvD7bym7NGxOjLFS3bdv=uFQAUBq76k9ou~H`nvaQ)| zimG3h%~?qTZ1m>yvm9!MS_jWTs-A~kgKhv$ipM;*{Bw~1z7^da$p{LMdR&H`E`hGq z((LQ2W-yEOs$wq!t&o*Pr}kqHje`{Ik+aAJ$)UA&d0DUE6eWB-O0Q^_(k^PAYWDBb19dsJ^oG(ZZZ)TcADX z8^*9j8n@+|&_-R15Bh+}N6`@dptWc?CVTcW+}p7Bw{KtwgHR5V#kFgffjBlSb%vu7 zJ@`@s!f8bKM)efCuEwHh47Eg_K);2u%#2T|XyfHhu-HcpPEp&<2QJ?X>ezFdr3wz> zdWGj-wTL_8UnHqxE4x6zMr%@0e$$D+l^5t2?~62P(OCmu)K_;}@0XU($oTsH@II zs#1guVNdmqvz*&jo6uJz!(Z~O2?G^SesuPa_=Q}7jem0HEFWRBYN>&rj}1>-wsual zLO^7R-%`10x*^A$6-t(rY}OTnvlj812`a4;JKa>7Bw8E(^im-vU!sCw`*=(~6jR+p zR)`Y_Ym8fR2;2_mOM^yV-mJ{Rd#wF_HNl0{*$t$slojpQ zbjB|m)-T^|9UPA8_EWWpwZFI4$A2$3@Ef}Yq9K2_DFjJFT0_Y2-gO{--&N==HOOyh zQsyW9bpQ+uQZK{ElWS(@EsqX7G{6AH+%LIaEjo=4@eKfT1zss6Gsjo7+;lG_^A5;! z?HrPI*aIqlIui7;7j9JBQ%P6~vBkb9^usRylugmD<0hzw3t<09;=Doim)WKVPF1jHlO%<$9LF%YScRj zt3oJOpYQDq{9vXGcYc)?t>>J+Xs=Pkf^1T&2X=TOG|tmGU70ai%t%BStrcX0jKk$0 z)pFe*SZ|_r6jW^_W=Oybsxqad*5`;aFO0wAx)l_L3DS!rv~CSk@Y>l5hf%^Kzkz0t z15C41xTckLW?*6?HzpL*5~Dqt)ULkG?v{nxsfsod>i1783bOKxD|ra>N+2Sf7c7gQ zplnkpCNbx$4VPnoN2`Tej~G98EF=C3hNT3$P9KNXfqd^A?pRtY^@aV&;B%^do>gx% zIMQOBTl>%6jfefs%LfzuGAm|6doq(J%^R}a4MU#!8-?k!=!%|qy!r2JXnkRho1^K= zQGJC!6n+v;&tG=()l$4^(l%;YU*%OHWIR9D?qw@?sYga~82pJr|C5Df_IWl0Eec7+ zO6oEbg|sfDbv+fwoMCiyC*al)UJw*?fL6;zmem6d2(WwyD_ftt5Eg4$%zl9@W5lKf zk-9usq;+3#423*B-iedi`J`L~s$UHL8cqO$2uD&gZI+uCZAhVAOWv7CW5}u|r}OuP z9<{vDyy|58=x6&O`ZbEf-kSDfYsgI@?uT<_n+qdC>?Tm#Alc#oViFUO_aV;^9}`ob zJ^TfZELqO|)hi8V{dCGKv{jxL-*lc%u*fqIVqvjs9s&N=DamlRI*CQQACMwej}84^ zE?=J=RT70eap9M28WJO#i{M9lUf`?(Z1d)G!YSY!1IAj&Qg}!OYXQ~a*@aqm3rvjss4OA>{<5*zRD*p~ zUgR^LOSKYgfam>chtI*YS9+esYy-`#RutZw3j0%%8DNU~2y^WFct-i0U|R8>C@q?A z*-I_&S-)FtVm0A-UM1GqXgN-Q$RP2AdrM=0t=7)P1`pxKtRlNb8Fj-LtC;+8ezYiP zAsSa!bf^)qLa4-cp!j*G5q0V*0z90$Kbq|ClvvY5wwea`?AJaGo@1bGW#|9gD{WXN<8lpyVPU}y1n>2dt|G?;;?KkTdwB z24r$-dAV$rLa;LtU#CHQJIYeac(>guvgg7^Qx|{GAGDx9t;YSaXF$fLn;*0(gg}kR zGi_wpCu^RSfiO_-+Ma%$yq`<5HVw$iFck%=^U2_MMblCUjjHoLi2>a#1?*M+FDL9- zRb?hfYaaOe?C0boa7lv7ELHPyP8#y)XhdacP|vy&t2A^SQ9iuX;Io0ud105YEAy`g z&FKcqGkxaAoDzJ+xi?;@T(Hq2^%p2ErT^n#ARAv*D;~eoiRp8+!$jB^c6am2w7MO3 zy>`4^r9eu@>t-(d4UrsT3iX_>v+grgohB~`g?Du1;DcOhC3~2x?_E3OYu1?R9@%E5 zHlrw)@)V@GopcIb!Nyd^S0Ikg66265#w7UgAOmmTE>!8 zxwW$4FhCT~1EGKEK5$2a$F4|}!_^p)$bDme*!xwu<$%-Fg5>oz%wgSha??`(7fnx@ zhOG3UpljSb8^o7;syAf1@efFCvOrGZNI~D5~@^=#dEdXDRsya zb=7Pd;Z<%9jSPJ$Rx9iWMCk|AdhL>jX*Jf>ivDbdVUg!f&d$%FYjJ?nbdil!Q~2rr zOj`uZAp@7e(|JY|TVB5fhk?O?&2GZFJ5qYBxvD{0o{@qk^nq{uNmb!-^*4crYtEsM{`QF=ke54ps&d&u2&4cM12 zr3v-&)qVp`GL2#3D_wljTs_Jxm9d@xUfaPWUHlNYwI5b*LhA7v@Q_)kS!>iLC2cT( z@yvciFAb?+r75vQ*gI=r7ga7oMkgXZjdjODvCFk(DGUfL>di)WDh=%V>yO}U&NMMCxQ>fE)Jk=Zwp5unrX%(ldbLHlDv;>#y-c>s@*yMi70O4aVPis1IUXK2WzwKt)z!TlUQ~1nf;xR&F>6_3~OB^ zplrPG)<66$*--E{$MJjDg=C~3{$B0~mU`xzp28o!G0YF?FOqpeUj)@5V8p}~!P3qw zR>|o`JJGfHsP)-fNI@EF-<@B+@5ZywdP$OF|8CkL<#f8n*UCaey+O+CJLz!~cEgO_ z*6B1cpMtJ6*rE#d)&08_nb>qDDSUrg4ybVirJ&HuRis(e4EX`_8!F7THCYnNP)|(> z?Q2zW(6zX;=Sq7tscF!vnXPQR!7DTw1A}T5nRf_DIs_`kHr zvipcZ^YDP-@#T<{^?j2=ML5?Q(R@ZhpH71|{uyt6-zjX0yd(quu@q4Y`UL0NIAjaD)LA0Pwm~BQy?2pBhQ7p#-dW!>A zC$Tt{U;1}2kVQ3KFcim&i$l&dPiU98u((C{;Zr*Tv{ITc2nggAhC!9L?oJ1W%>;IUXQ^?&Z*$T_kn%Ig;`d4yMG4i zTX@N6uom>$onZ&lj|0tqRP1iej?g9R`}{tt^BukB+bpZARs@>`wvvqGgS!LS-R&cY zC(MI}d&r!lqSthCt4>OG^@(F^8$W)Gf^Y~=9)Djo0h}LO9=|(^Vsv??NYxDP6;58KQ?;+X5BlRu!r;!UMBZB9PFD^u9b@OtV0SIs)>WxJ^ z9NxxWN%>TWj;?zxYtEWc3uwFx4z4}8L$DXvm6)HQ3r|TqQxdF-rXvAiQLrx8YRlN_pH#*P6kf(alTe7zy1^LDQDxcSa*(tZYN0T=o!8Uc-<*S#x7 zLP_MtnlJ_PQYSi6Z?1ARsqGI6VRLDZ3SxCh-Z7l*{OF?C2wb2hW=JzS*{|D|8EW98 zNn&K4peIUmEgXVv@?FV7*hO@7Ov9D14IrTUGFBHd2{^u*L{um&K&9Dup_#i#k?2F1 zw?=W4=aTAZ_(Zk27ifw|^VleP$B1c+=Z6M*cQ6rfIyhAq^r%Bvd;X_6WS8K|>cB(E z%u#!!9OhGa+7dVkux`aDpZGX_ghtUrnEim-)ajZ)`xX8+F{m;JtK)abB?^rq@a-Z`~N`IWKuFSP?K{v9UTEV7B@dPr8RrP`MrJ zd%>qe_J6v=z)eQ!evGDb5P(ShNEJcK^!;r&GW`PoVNED0b$bS2yuZbUQH2w@AOG{m zYj?fJ9++WvI^FU(SvT@KfYQmuW*r7m^y8ERT+a}}QfB~)1k~@B`3S|sn9p8up$#`M zOi73uGf2Ebt<+xGhC#DHZJ*!BA@C1``oe&$l|J9eJgz%?C<_(I!gqonsM&g&zhPygig&*uv(Y#U0pFMEn^os%~Cc z$z$X$!E9KNyUa?Z#Bi}ho2#cOpsGz7BbnYiZD0gzFnLIZ*_!p`+rux;bl(k2?;poJ zwE!(ZG(U8V`j3s6!fX>bbnxa*5o7u=E$h$8pYpBxUaV=wWMS*e9nbZw_jDe!b{Kdm zzU??DPJhx16--Lk-}ZjBob~ldSQeSzi4J_{(=NbLdfre_QO#wfZ~ZxH=PFdE`ND4Q zHkGBUwk|+>dt6jlId{Kj#zH)~1f=_V|9crqnkamacMldSNd-jEd@v;^uXok;GFd+< z*hUdKi51jOP4dv8n_l!PYZ=o4c#Zd&+TWp|mb7#LKW`nRPd(JA4#t_uGf- z?Zz^jQ#{dVOE}YTNEB>mzV~B76ombN#z0>pBf`AD%D95}szj*CSGqo`_hqi5vz<-~ zlLz}A_!8@vX(toy2B3ere8Y)YoKtQAt-_$SAgUaR=YB--{Z|%1(bIdrB`UrYoCl>q zBDa$@I(pHH9>cGsC$3rp)liMbJE(3llWs(nU|$eL;ju^dkS8K5=`-q2OAr6Fk?MJ{o z8mn#k@ZS03;RW0<_FQ<;CRC%1G#ui$OJhvDy3)z@C`S2s3wOXsi$CoG0^=O8sA{uD z+J=Q-Lc>u<496}Y@jm>$XrQdFOJxTwiQP}74#Exh^?q*%@nMkCnb@yon8xa!%z5Yn zqG1TW-VD2@(Z@+3Xk=Z3a{EMO-@sp07n^G)gx*}!tC&NNBdB3212m#uu50Ojm*j9^ zhoMMig~?5d#fP#z(O28-77iZ1Xm!cxQ9vVPX8os~I*7r5a_fN8YbVWlVlxChR5TiO z_|)hNUnS7?siJU;cmlpM%W|<>t^8({W9}_pEq^l+N5*&m?D(Y#ZlNswA^KCNG?B?P zJ=+j^xvTxpa$aBR*FF$YXUnx*jMj1d3Izea~fXf<3#3IROy9N6w@U*vLnn|sFQ5Iq9Ar)sXpH_)}fxSxe z$i5y8fEo)BU3@zlC19Y2i`5TOM*gN7^XADZV&V zX2*DV&F$gLO>ed7Rff#`Xu@Kq;%><*VtBIvipfXDRQ{7O+%>&dIW&f0?n9z?Uijwl z^%g4p<`chPw|gyp6-)sW0=v(%)A43)lby%(8_u!a^m&ZHkERp)drg!R);0fiBuXEu z?JV~!Zp%NKr%~Ai82w;S7nOh_0wO4f#Gitb;wuL`bFp5+siFd3AQYXD+e_E`Leskz zi-2&X6|wrt+TVP*!rit>RZBNw7bjIU&uOz zkm3C8TokJ#G?a-s+P#(`wAHFx-`}V2+{s(6={ah4JV>N%*nBR{WuQn6QH!r3bT)(+@)^mvr!z>Y(H{4puu`82k39i0K zs$(Ho5-<4x*=KIFeG~HH(tvmvk3X?nRQG0-(w{rvLLn$3l-DJQ?f3>I5mfY$s4AKt z?UV~y-3x;_cqd)VVSO^&_Bj_`P3uJ3PwXp!Y}TxvEWWN-z5UU9RRy_Wzh4C;LO(7= zw6oIklv60c1Cph@!8{CnPRp$8uI`aiFE>c+8&yAitjj?)*0ucnsvW$>67l|PKzCXG zD0qfPBW{Y-N&lzkUUcu(@eZrag#2k*HRq~4VK#h+i7<4|I4}yj-ifFDQ5+7U?hP=I zp2&Qfx+$7j=J4>?&ITrfK)BN}-trnzQ1dlMr5g|y>?!;ql^nYu%i>S>c~_X=0Jt<$ z#Jd48c-{p$IFo!PnV8L#sAgi=1tQo~XlP|x2qw76be+;l6OoArf+3|4x-M4{Ko-hx zH(%=He@MngFy4bB654$ZQIaNv=Ay;wLB*oj`1a7)+=w|jQS*%ix-#~D-AHVSw$Z)fm+Q2L+bP^fo#2|x206S)GoS`q&v8pw4ib}xiuneGLOnowO^VM={O(OEfq(m)0>NpVQfHC!j zuD?dg`0Ida)1Nq)v+Um()yq&($mA(YlSKBX6#~NB>L{7*J*#>a>l>nfMHT%ADD@-K z&o!$3DtC`&*z2#0m_aXup%lo%-DOs=JInq#qHVR#XT&8xin$*4Xs`$2>|Hm9yfE2d zcN!&qsc%tipDeU)HF2i?AI`o4s>*fiT2i{Cq*IV?kZuVj1f&~8L0Y=IyHli5x?8$Y z8tLxt68N8e?>*;u@ArM@ocoXAaG(gX_xn66=9+6x?Rd`syl-OJ)sm5#YTpr12GGrw zk6+^)N#^b&XsgQki<{rS)Iv>>74dmPcWj44a8Pv#n~Vwd9D6n8aw*RP zEfn{?3-GwK0X{mHXd>CjB730!DMp9ou>x)_I~+}17`bWz59h(oz8OA(V7>jBToN!D zv4Ged1bf9qN3Sm2-_;b))E=JuKSV=NAkVl25d4QeLzhMd*-#Cy1nt;yf{p@=oVF8O z6l3}b&q=wOklIASAHmv3WFJ5X|15k3j@{(--P>FTe@A?8fR0Tg4#-E<1L#_Yb1;>)&XQoIFdcUT8RIWsulxWTi#&@k;f-2rh5d)YFS~ zi?_{HjN8HZ4xjAigftsrQUpk3QgBQ61Q*N@+2W6mcuISVQ{N5Kzw$a9doUrrKrTGw z*O;>>3*Fn?3XXkD^6;>rH#aQmTv8uN`^#c~Mr?ts zf5T9FHWSk?OAvB=-~`HKjJ6-Yd#!)Jq*923&A9N6k#v1arJw?9h2GgT>Xa5&wLoNS zqgkS)q9UB@f`N!{S?70_65Ovv6@_s`pl>1W9Jh()Qcjn6Ve zq)}5HTF3DXDu?5$pC{f#xv?zB=jThA`;#Rfk*G^incuuVg_3^@R`Ksk`LfRr78W){ z?17vkH7pG|B`&G(RqC=f;T;t_BS2MS?661dUxa9(`IxYqwesGO!=pVx@IS=O#0s=l z8mJtfNFng0di?ltGL`s~LsJwHW(%zI+)|r0nH1wB*v96Te`(f}c@fBEp60w=P>*KWaLDt15Mo&q3BvmHoL2NdC4q#CXfX71 z<1?a!jjDi-r_~0;tA>Oe?jNcj zZjy_DcL+H&aMCbdu~##cW^Q(IoK18x628P9 zE<}3RI@r~mB+>hE=<)F}thbi0k2(}HY%>rE9>=8W?d`3eBRf%D{hSnq8rd$jju%fzl3!Kh@01ZTH)fgM?2TQLuo8x_85wIl#Yoyx6;<@}KX=|M|Ou1S}a@MFpRjEc8pH4-7*&!W&9D zA{sb2F};wdC>%!a>GEVhW{A40qaz>f`#k+#d7+;%*mjW~Kev)>)KvRgfL~C9d1Mh6 z*jRWx-eWwgoWx=JnGr~Frn8X@9p>aC(I4P_VKDX#IR~2~YV*!Jj7h-zQ}A-JzX{AG zZ(Yx)OeBG01w`)|=X9Fm(+@yUZGf-{0r7xtE-fmGoRI7NkloHFyndjRq5;#j+Y2$z4zB=tcr^i?tg} zOM%SdXHUHOWvkKBc?auAXdT(;|Jq3np%>`Q3i?Bil%OUcQFx0Df0SQA}iZx1>) z0opMU6Red`CA2n*Rm(#df<@oaV24)dB{~BOs&GR3qIgUziC~unCd{l|CYE%&e#%wG z!qFCAZoJ|B!R0=wr%Igy`}jw-S^e16^)QSYl|2d6xopipkNe$b?BOWAP0N8UZ$BXT zpZeH{cH97&`F=3kSFXFCb6AMOIGnx~P6R?eujY1#vjQyXOdPj5QDM*(`V*Kh5FKYK z-%(il*4my(9esQ#44?W#;r5l4ZV3VBh%R)+4nPbKWOzeLv1K56Z#)6RLb-ils~ zdE^|5!IPO^I(CRzm*gEm)2vgV|AnswXuY_qrvq4|*=_?OdytyKY2XIn5e>B3k?^3S zi)<8fCh=-Om`(EsLh?SkNx(0h9Avu~AgleEWpbhf$n!K?;UmIXHe$f6)Sk6yYR@~2 zj*hw+FCqOWxbkOAamd9Vq*)w`Zf(fMIn7*^8!onOTAvK2{)d;!F{af#GUlj-;p6vB zt_3b)U!LnaZe)+kK_Av@4&}#*J8{Vx^~v2jX0GJWeoDvgq7J5cGQY!#x1S^+ffe~BKD(}ulwn&a;S-_H=ZZQpDSj;a}kQ~Vgs^Lq%LcCB?e#=__%w2!u_c3T_ zIWGd=dhDGE@0czM5H6LGp*C)hgxQtR8}XltU>v~{{WrNqY0KEAUHQmzWE z%L8>~T2mRBV1AGUu5UGJtv&%^ad|nw-g-&T%Bl#Df=>o~FJs2WlphPZH$voT>OX8{ zb}unH0Ewt(*N3PCtC}_RuUpJI8^D$)wRj80X)_?93LaSionq&;s&~rg$AOgLhtyYK z8C@0-lG8(g=&BUhhiuw~B~8XdaywU47Qjq~@zz}2w;GQo_88aF`t zdaL_Q@WUXW{cyEc(f!$`4j{!s)<1!{!fkm2&;&7F=?e3{P2skT2MSYH#5IH_X?F1t zqiu`p_#Y3sr(b)LZo1(?ktdr^6eg{E?HPtY>)L?BpNTWaz~Q!-Rf~>^QE5cRWEKQj zyey;npSI?p)cr4i@ysH&G}K`pO%RcB?as)RsqF54!CJupYyF4 z|}62%}*8-hi@d6%KNBDetn z0+l%2)>Nh~9>6}4j>+t}j$X(P!|oi@vR(%TC6$1Hwm>V_+o6ov@seGHq@*NhR(gJ@ zfQryi6p<-IL&F>}Z57nFuI1sp!smxEF)=}wL=slh*0?pZ(N+VBb6zkso-SUui*=OT z+^SX{DBPusEw;u;|9NPCQT+^{fEs{B02&+fpVR~sX3~#1}K)1_{<9oUlR1KY1vB@hPhxk38)sQE@CqL|XOHeIES& z-vW9KMoTOLsJOkU2fl@SniqC=b;*EE15I)`k>Z7otVpOd*Qv#@CC+?<8;s5v! z3do47>+7ZkK1XRKp+O4kyI7(Ga$;z zd@*Yq0bIt?p>8O0I)i*=nKr&KgrrLxDv=w>LRBOAp&zIW7C( zcBDw73d@ljY$G-3N&wxM;$<*%q^$$w8RNwkuaP26Zrwyk!g({0NDf%l@nweH*XOo= zu%-l1Uk39BY(y3<4kEx_2))C|kWVco1w|im)IWT#emjo6Ga%ph?{?KXr6=zKaLhrW{0lC!mZ2=avd-Jt1to5%AKs z8L&=1i$hy+!718rFvcq@V3**f+^j2h|1Qt}4}%{Z8c zZ97#V(DUu&Ng@g+7^If>7q*z$8UftoAsKNHYz zuk()^^B;e+h(R+1^2S*?vU~&Nu7TmqIGfo71F&4oF)}jh0j8n2(ZV7kB0Yw!Xc-IG znbn`!vbED6?_iR!=f_XdVbLg)tQq6erCHsOFH7j!W$Xa~PKUG2VM@qr@PrLUY_E@WJBVUmsQXnXo7C|Ge2|KzZ9ipvyy%182h3w{W$FPCm&9Y8saI#W^BMpgenhqdtTw<=qu;ul zcmofYFmc))@RHbE&fmX8hMoax%#eO@6)23v_w@8&S$pq!2K;!;{zghv)Ei=&2r*+s zh0l|LSi!i0Zv%0N!a;D@8j&y&yM+iYVU)lVG$M%sJv?-wd=m}dueawjz!OFiETWOL zo`cT(XQoKU1;kK&Ac@@=IE7DNAh(_X-qmN)uPr(6$%-J;{_+0WC6i#-iaR+z&uMD&8j* zaIXA$cXMzI7%E7xGx;+>ppFqlkI@z2nBniN(beT~f1`V~-*B)B?5JNe5Bvx?xftYL z&{Kh2v<+eI%K%tY1SnSzv*ab6jogRx$@Us*B){DUul69}ukN?mz%&~R2WRbKd8*9t zIRx(x!<)yxRcLYH(Z(sH|67T2%oX}I8S+vdXP^#5dBE!}E_^G!c;lt;5729r^aWy4 zzPCE_cNyfIyzKadvC~FQE#7*m*YzsU8sr-{Ywx0;AZEuya5RYujGXE6R+l}%yK4J5Y8XI6KkBw5P>;Eo2f97 z*DZyp3U@YOU;zg#b$>MC&!WnKI+nnR@+E1Tnq!}z$PX950^jBpucQ?NcN@;G7MxI5 zXl>NROCM*kMr8Rq2xS?Ckn2TfDRa|lwDY}R_e@qeugvwu!9gI7D~>VD45Y`02z*%G z!IJMmY}AcCH#8650w<$&7(p+cNb>0_T-wDdeZ?*X`0pK;Kldy>luFvbBV4eX@qd1I z848Anf_ImObr5QIrU9Y9ELOfWEQ!l*86BgXguu^w>y_+(?uh>L9a9#93T^Ay?4gj4 zBC=amyk^^AfRlXMCW`2qreF8B-KNJS^p@KEjsY3o%pO8vVOny+@zy%^5hXHh8nZu` z*Cu=5$F1$y<~R8o!4wk`j0hasd=YJy{P3=W(JiZhDQ+AjCO`=40E6rB(W?f{EX03W z3TVi?zSGMAvZor~UKeQuo$(+?)Ju`3JCM)c0@)!qZ~!sKr`z!s;%$|oKrA@Qz?A* z$V$~Ce&AR4f(NiH#BE@i<&3%@zqIF~EzmGghl-k7Lbn(I4nEqyR!V=`Lg(8M6e8IR|58rwTmlk2iX(ve z3(b7hLm*pC1CgFte|Mo@2THy*=vFp<^oInA!YwyIGar@&sU9_o3B@{`|5yr#P|OpB zP|&rOX^-@j`eJWJRiX#uPE@ZEBz>?s74dW7{`O73&!Q#WMqXw>SzX1If zFg{-cDQn~sxDKPx&5!%6qhISRIIf`L)LB3l(yKpl*d7`oS5RooS^Y%BhFOWkS#Oh8 zs%_Rj^mOE5V;hMw=v8r~@Sj|wmW}TL3S7CQ2pIur#B_LCR$fT z&jT24dnrbax0hzIQxL%s6W*T(91<@d*#{To+~VZF9vCklu?M4_i`1CRwhOK&VR~av za@Bf!dWJB+;44l6Zj6r-&-&jqSpjWf?Oyc^?7VSNmHEu;&J5tgTix&hQN95qQS=2; zNKlaCK@G-bS63IrofojGVak{X_5@3%SMeCsGBTIwi)-7S>}f)zsBGr!CZ)mrYTsgnD79u@nM3HE#Qy-22tVcrdzck9)tCoEh+gIcrYi49{A%y zPfh-|v$<6%!YnYTr)yzkyaz}6OCa`W+gFgd*<3HJbQ{4yJ^s+t>_&95NRtNRBwn=# z`Fjnde0l*g1vp4~ZL=%keBVkE!7^-Ru)|UqF2y9^2496QfQcyG&$B%idfG>QFqmxo zOYqaPb+#}Ly{z3tSvQM`TUkH|*Se8{kIY?gBh~g4rlbkuseCerG^Bc=m{zYel_ z9AR0)`W~C4l0!7eqCU3|BJ`eo6OacYyNr%?zo0sQe&K{)(v(^)i84}LKa=O%;{fA! zK99?#0IW{PvloB<9D<&JXHL+K%Vpte4w=z|Q#+`Dz0x2UhcyyNy<9|l^(vF@d`bQEAY zB=CgaVhjQE+{%tJJ-*i^Iz{^I>_FF=|6H^X8NKn445i|%%^5ffw#+bz4}mk}%S5hL z?QiFJ?Fy*QAKs|(B+?BcmxgIh7@L}!s{61Jf%wD<<;tvm3H@)Q5;P_#1UpuWN27xr z<`XY;mC-GN68ZjCI0C6RHmwEVwnbh`j~zfu*&HYv&kzMsO3%O27Q={Q zpu1WFg7%#KUESq!h;c_CCY@u`_UA9Fph}M4Dfy}ck4iuVDS({o?fkoW8`s)qSl$mL zvTE4Rv3M+=;l2we;FMWJ{qgQl4JD$Lwt|r`JnKDeyYBt9D$dF@k6t-okj(8aeEm9C z)UV$qjr|^^^!g7-jxZ6Z#JtMw%3Y+V*6n0N^Pp@prt0O8f^>O%;F%C}<)z^KcV3_W zyu@Cg$sc^8g-rwYaE1)kOT*`}N^(&k*F7A>*3kzMn;x(ewyPjHg;!|{bT?yJj6`H2 zQiR`tPyq#~x089Ly%T0Y-!O>x6Eqs*XTTT_k^e3oOzB5}Q>YUFr(_*hC4_l&z!yX# zy(LHU$A`fE37`TsyW0PH@2)%jEe=n|QAFTqf4WLm;T-s8Ao0(MzC|u+1cqtRpe}xv z)dMmk1L%fQTtQO|9aX{UNaSCNPU1}-+zb);dc@k%@$A{NzU_p@X=WTZZ$8HV$xY&VKm>v*V2jtkRe%(6?jG^fd@291NfG105 z<)Ns{nBwz-?rAV`&0oAI1Ut(h9$z{&Rax(0y=#F)2M8bS3}jJN2yI&X>rQdQD!7!Y z`qrkVpCPmAAdJ@3`MHI2boD z@WL&K_ZOwq|E+0XqxLL_(m&fCr?*u0|5rBhGNplF<%5q%Sl>}u@n8yj90KY7958}^ z1w44zRNVlRb-T4j<;!d1aHR=P40ti4X^21${=<-fgI!>v152TU5CLQU^YRGVvLQjo zxj-0}sLy`)2l>?0)b`axu)B|+#KJT2MlWwoLM~=z`NcWh^f2;~q5^p02j8CgHX|Y; za#kfWOzOYT11L5IGjCLjG^oMt5owQgpy59N=~LzX^jcU16ddN8 zF>e|np|6eBzZyjKz3>DS(a>P1-_fN1i4Mt-3!^vYJXqHM$BXnLkN{s|HnydwFO~5E zwzz(q4k8ueroVK{MNQpVbL(+`;j!(8x2*AxZd5teb7l|M0f0slE9@k{9h5)MkN@Md zL~O7S>2v^kRKG~$RpEO7BV&0E;N#NZFsy>kB@SHCpOFRh^kB|tb%@XcQ^Lo__KJ2{ zz>&u5*?$Y3|1%Vf5kW(a%_2;HPfuh=M@O;}PdqSjT#O`xOd?g3l|M)+`^WuOIsF%p zAMzz$eN@6n7RDn+kX}CCvwH=TTe%VYNQ3H^8M5%+6VHc@v$I;g{r#iprjLk;i#`Gm ztDwNZ{5c$>tv`8Q|MLk-En<)@<~m+r@PrgX|M3j)p|7s4$}JZJpE59=;sLYH zU)z`eEh7B-<&cj-i=*dnjF+b<$a9$V3y!3W3&lUydSaoDs*f4)-+ohtTUeHm@-O-M z`Pa5@!hiiQ<0Q#wXlM#I=2}7*gYc~XcJ=$)OBt7cFs%(9Cb% zG^`Sf977E(N?KAZ8_7vsFF$dZPb-6K;d-f@%K0~|g?tt-;6G!%@^3t*jB_k77h-l; zqQ}ZBOd6=aBkYytByks5f5zTMiMg&Dm6$UnxU{u2QtMDr{-o1NMR+kO$;^0mHjFJ_ zI&+}W$q{F@g^FH=3^d?emh*+fdoIb~NTbvPnNPd8pnZA`9l{deqVDa|M<1gb<<*T| z*?=Ch1~II7M4IxpF$1p`EZ^IyjU~nX`d5 zI#b7tkmD^Gu+fQ&`%sm$Vm$?AKr;Bq!w&t<(Lv>%y1Ub|$y9|YO=bJYisfyN{>2lO zWZgYkeo@!F{BxYUNTwrz7_W7uSe&}cvkZ+imIk5Ko+2#)A`l}O68ULawZcIkOmKD{ zpCE^NRw*DMBbmuWea<0D99ai&uJX}7*xFqMs>Fryu1Sc0T(@6qjQ{*tc#p>OPLi9~ zeRxXd-#U&<*mx#wItW@wTcauW_*waDBuAIqq7rPQy$htqv?%R5=x_&ObV6iLt#r0{PWx<>j{SEr1sAf$KY&$)(A#ffU@KB;{Byz1%&-& z_0jQk_<30MWbhig#g^iH@~il5s-wLcb|YYk=B#_uEp(@trq0g%_oAGah8#Hm4t9aG zrq5__KmNhK{Os2P@TY=hZ6o_#>uza~%&Jy3r;;jp%EEM`!Jc1qqZ`J^>n2CM$6})h z2MzPHrv5F%=sm6TEK-@VXj4SHN|=dX59S6M^9O<00QhnaDbP$qc5t5vaw*2&my1Gd z#~$;3$PeY9xKGx@#AKp05cmo2*L*&`LpKkG5j7uxi2ajPqorwhYV;1s(kgR#UaRvS|66MVT~SGp8Lcrc{%wjJPk*z)f9Y zO>)R3pYe&#+BJH2wNSh+9KS^knH})`q8pYLn9yB zp{0#;@oI|6R#y-!7S6jj)hsyL4Tc|g*^MpmNg30^^Hp<+%8!wZ%w(#wjW%RreAV8~ zvFOY`X)0HPpQk@i`=y7s%*+*}`&+cOoa8afrAMfW*$Ladt&P_q0H zhoPP~r3BXX``)lqk2;3fOQ*mGjgSe_z5UUWc2j<06s8{=qf7OiOD2{p42z=&Er#Tq z61#1qAvA|#%XT2Rpa-ixi!>(O>Hpm-AVeu(_>gJpsExic*d zKY2S-o^Nx3q`rjcd6rP@vp^g$W!2V<{ZPIcOeJCAhoe-#NgdmbZxU1aAd!Slp zag7vat1^ju+~#*H+i~wa&gFF4zGL-dVB5|J;Oiq`SY=|hz`HDP zHm2mwmY0*abw&hOyBlc^&02Qjacrj@j}*zSj{BK&fNWl~qdlmv)gcyBNt|Z!MkX!- zzTM*8QXiY$R)HdY443&&fuI>j`zwH=UG1B7KaSY?6`1@3Z2Mn=DJ?ow!q$w#L;Lc0 z8Yur?Q#wd^7|X3nZz4RX@j6k7YG+=D(l5zxG$ImtnmaD<+l~*#)zm}Dx30qhvda7+ zFsLuE-sOHfY`Qr;7FyfUjWM2oDJC1}xTNpck$qt7MCThV8EU@F$+A4dLFt}et{=cK zqYs;C$}@Vm*0xW-a3!5vwD9SwBgyeOVbr1hN-y_dVB$xOMs=>;zDV?LG&HQy6jP^r z_n$}Il4D6llVNVUZJb7vFr&arGzko%7_1!XYN7-Md+1|Z`51i*4xC`ZgU&A^XsA5QzQP5@@z_?KaW_pxCQ+S`E zjmU0#VT(F1++TfLXR1h zf=(_pK*~F769- zfh#(*Zgc9zSsv(Jm4M&YYzVKAsw%KT6>Ff@L-^wt%1eeta5i7&xE5* zEz-|fLiyPQ;h8rq$g~G)FI6iv%}pKYkvG*a8ZH8~vCl?HrfN32)08iA{gtcbo)u7( ziegkb;}m z)BFaO>1%=1aGKoF6p!~=K@5%p1JHfkQ%@bPiHn)iPPmA_JvzV=m?|!=9g_5g9|?A| zKAn|MdF%9^ZE)IZD9iKW=IkLB!+6ebS^%2?x7M@uVHOr@N%IB|7wPmxDrues3F_1b z%xmCD&`*(HT$n%Ks>dBaK}AKYMjHy(u9(=*bE$jj;lEI#W1MWS$%mx(sgQFKh2OpP z^?lPyVUfdiZ|snp%9b8{;;g-@Z{WDE-NJCI+sTi0OVoDnzRyFALp;QJxLhV= zo;&GO_?0v?&nfkLleQUYa5?JmTUS^9Q9s{Vl@~iqrJWo7%ngNVu#JgXj&&jWMQ#fX zmL&tW2+!wMKxEH(fqU@!v$AyR2hHmD(g3181-$$q%{_qmyaV*~4{LF%_1F^A0N!3j z*>gV|Uw(lMbpWO#Z-JoiawLSg54O+*s@}D4Bx`zNtp_~oCY$$T!7~P{Ngb@UfIDK5 zqqf*=gc#z0*XtO7)|3L_V9@C{^NR%j1kx=---!9P0MWaTX3=lRk+`FQNSoIo7r>Za zrepac019HW2z0czAmcCdZQt*WL8NF*nTtMAUPx2Ia*G*L zxy~-jho8UP9Uf9xFfnF~sCzyG7|Xa&shEc<`gw!&d>_d8aqmRYLc0UvEbMVDaj}Oz zNOM!)*S1d=xK<#I*}tdBYR!^O5mz7xv56=Odg4-@hIUIL@iL$)dfOG+t>BLFWts}9 zx_#oSEcKTD>!u#G@dC;3_21k&o1&11S)NlNYkVcJ$r*L3Hm%chu2{(V;4AUP_M9m1 z*)GYAg)^?7wcsO+op5vAkD}1G@5F1mR(DD}bG{HLXSx*U%hG$yOMO|6p$+zHw4?J+ zHaNZ`4)Gu-ve0@GDA>4WQvk!atx6}mq9)!*Mdv?}D)niL{$lOX;ku2WM+l1@Q;1i< z&r+|tnN5G*xJ`E41Ngci2So?_@H7ikowVz+_eaxjqQ;8lV518(99hEZbDz5PQp_^; zZdF=!m$`~ge^iq~v9<^)Wjo#4+f(=4p)u~SFgx^3nO0C1rE??2kuBhPoBEw#;XRMI zNa_ctPMcGB_Op|-s5!5@W{ze{GYxmL@c7QsA5L>#u6r6gPy4t!POVHNR1f?325j63 zL}-1RC=S<9&ImaeWX|#i&6;6m+4pB^BG%oxRmBVT_e-sEn!p%BBGefW3KhP*4nKj} zFNMf81v&yBXDJ{*V7n3OgG3gc6Leyv$&)EOXM8z{nLf zQ#H)U_~lt=LoSJj5b5=GvD}ACBcwRwfd!f#U0aFRZLt$B(p(YSNlYRq%fiPZAIoaF z0_V&HBpyuO%-S*X?_nKTN5IFuL*|1g72L8C;(BabS2k$fdwdkmRRwlYD@YF<%3+Qo zZVbf5-=A0`d>Fj*2&b{Re?OL|u9D|Cx$CoDM_QrV^!DN2fLZ%4U&;k23r^n$f3#Ld zP?PBB%hY3dEAk-Z;9+f(#g9@iFdvoM+ASr-SY-BAH504lJ4rH0FMIN=M$rUNN;V;r z55>>6&*$NNKL-N!g9lh7Tf0TE> zyDN{J1Vwd1;RO2TBc1e2@SKm0ABeCt(~uW)dL2CPXz{u|Im6rXfk)51YK%lstan+= zMRa9{O+d{3GG+cl0BoMfd?F{0O^tq);mJ)&Db_{Q=EV6|B}2w4f-qHbZ0u?kRAGd} zdR|qU^Z)<~LTLdoE?TqT-cS(?^bD1dN*>*VamqIiOTx_sP}7J4ocC$mQzgmrPx9c* z#N>55(W??|No;LQRR`=~BN&pEgH4e-`(dy#2K}XL^h5zy9{p#HFJDMzIP$krVCLX~ zcmgXAb9!QnzkppuGN{YqRUse;H(BfwCwzp_VyA_3h>I>;B=P&XRe+Xw5(&`O2-j|* zKHxvRUtX(F@#f{V;SwoqLN`Qk`V##og+ntfoZ4GcpO%QK5BnC06Q(1}BavP)?<<#@ zsw$nf;hAFEKdKKsT^8m^=cRygYJ&A`Kyy%@XMt;66}T}XwXYb=f!}rAdAeP0%j8?# zJezgN(PN}d$?xWYy8SalB?6$$hv7a7MY0RouCR+09+ZL`dG-R z1`dCXW|k|<(i$TfiVm@Dw8h7Y_zJ80+BCBi@$%Y<3dc!}@70?zl~$S@=KRjl21@Kt zfSrzoMILr;syyGcUJXMrFKFil3A(=W9}Cn1)0i`)vcNZ{~_g>=FLm8(dhi z{2MqvxRPfGlS&nnWn}_SqWZDSmtDiB49|5P4|s%jGmD?p0|#E?`F`xhPm3 zCm|srUF~eQ^D0knH&Z)Mt>R7CYz{iPwT%r@PHwK$S8HEZ_niy)ebF#O5%z1q7I2HG znk-Q2cG{-=$caY6PkSbU{}YTlWCfGBoecFlVv{q zM8xj4rn}R57berf4kdI;afl+R6!%BntuO-nN=e-cp$h*wn9XV>`w&`o%HTYG^2DF4 z$9CZ$x-QnkGjZZmv@Om^odaKYdcQZ1eZbn!o}@vG^yLg>Nd_K2=tSz!R}APWE;z^P zur6Ad#~Pg(Bs7|UWnUgh4h}H%-;m2@h8YsOzOz3}W>`E76x3|o; z<4A)!mg(CrGS)<;h(x!%3Iwr{EsD(hxDtHy@Vuu!>{5BwL8QILOgGQs`3`+tBGR{A;t(4QM}i}oE>H85aE-ybkPowu&G$bGRp1im z5ZO+a5ff;{&sh?m^aU*Jj2A)PrA(KDCRNz`^yw?04Ymm^fTR8RM|D?Mn3kFEY8T^R z?|f1aS<;W!`ctwgnrEDfuZKX$NlOJ@0@9@NDUuhcgzHts9UbE8wOVBc&uSu?pW&xK zxA}~snq|w9tggTnWn>7)jIRmM()Oq)R57qkt+{kbsu88!+-k}7-V`4WHQ#s_RYlpX z^+|svi=Oz47K+v@nq~+zb>3tX0x}^k@4lxCq^%ROd{Zko3gXwd1WV8(YwS2jprTg& zaJs4JWRTb3IhiIQ?KWR!mVl7l-rimSCWzD{D8>DY1)hGWn{$hLnqxf%kI(~~1tj#Z z74UKW3c8hU=0^sq(CRFf8Dj!Yy}L}y@x~^-&y$YVn`oWBSH4i3rX8?myB%_%wrWPq ze|T{v2tD2Wdq-zAjMWnHB;ajWzDyk570=@H!=sh%wQmcqe9RfJ0kjc(D44}!Vw+_b z81zW!-^NbE-zZnP+4Zf#o)}_Nh$C1xm=!7PA!9@{?;Nupa)|e>bHXzp zPq6ywz*DA9+lGms`!hqk!7PbTs20j``xd$p&hBNY%jGujR%^_*W^Q;xR*GEe;%=5V zzk2M&x@k{YUrumwZhgL1$p@k*JQv~jkmkukXbs^~DaXy}2zKRSX@xW)+S)Y0n4Vlf ziN`=4-bTjc@Xce~)m$665_@y;`?_p+dCJ}HR*BT<^NlMdqGj!|UO<>gJ*Q-EV97=w5_#tg2x zf%%0E!{G->B3u3(+{r3{pRXP{V}&Z~>G>E2lw)FI+6W-}b33w8rG|oVMXgnc`uI(! zfJu@0W;GTq8gwmY>vwG_1tJ_X;(vP#c{C5K(}&|9L#0(=?^B3luUROWU5!*SX7c21 zj@W+p{!+>i=had+$=wstr~9hcwrez-po}y-txjEX(RmLTp zCgg*U+g$L+80E*D^>m_IYN-U_Ix%z=;VuQv*M*^B*9r+r};1@$-&!9z&Ki1p-~+V|Tz zYm_at_~jp|s`%Zdh!?hEqDaQ2Ew$vx0pBG8S-2w_PA;O8WSo{2rJp|}r?uykG?{)L z;5fF#zxTc-G7hYH=q_i69E3bo%3ZbHit8jhofOlvhDBDg8al(Sje3C0jIjw8P02iP zNrbNXEM|GyL?7eYavip*zt`dy0PE!(V0|pYp~6rf!LUp8QJ)5k1vJ8#nXwmXnOdqB z`!if)emGp$)&6lJcG)KkqEk+2kX1vWxs5N>W?m`Bfh_Bf2?=SCU*K2x{~kd9k7^@T z7n-Hqv-Sk!sa&w9R{LSS>0&+$^q2vVEr!o3U*h|lqc0yMOnwpz0J|&|;#7#_nNCdmAzD3#sCdHvW%ov<9OKmP~vA$)qPKolzKxq{-HN5Hid>+BOu&W zz8$8JZac#WJp*AZ3h#wn@z*fLtr|pD99$H^ol#pMxXkP-eYdk!Y>?E^JE4wb_ zOv6CcBD9X$E~Ozg#fV;?9Vv{Lgfz=Qn{^a)H6n@60cGW$X42P+nDEw93XfT@@FZZ_`}8g^x>?0pMO(~yi=j#xgnxp0{`eWGBVcghrav0qz0dI zEcQVrrv+Yfm|He0rd#KJt!WOYuztav0AcG5yB=Y520e0JMEF$W;SKeBqECiFTTG1l zla`PgawGB?DQ`y$lvQ&zG4j>xmq~V zea|a?#E@DgDI>`>$7}fb?A95lsZQ^UU4miC4C=CTKm28oBVJI1?r1Ep3euzQ71j`k zp$STwlQ`LL0|u?Ew#J+`evxDex7}FmZ-<-J0!EAbNdlhlQ)80P>SoGMkYr@hjB42! zz1bLYk#&$x9=Dz{GF3x7S&+Qf{HmK8^s?URW3vIX!08!*b1-pO2>rS%Ux54ltwXYq zM{{H8EkMSl391JLyU#5-j?x^0bKdi3NXepY1JyIc?R4(BQsE!>n1+RZx;{*BdJCz)gxvs*4JYR>FFYBiMA17 zaljd1`CD2juov?1= zloPDez6aXt$9j2so>b3RWC5nHoNpAyn#EMP!~hF~f@!i)wvW!5&HA&|PR#Xu>>g}- zM6Z8Kqc+YbBI1SEsrzmJSZv*HV z#Ivln(pdDNmw4Mi_Fer@k8y8wP58c5VYhU=<;-lGK3j=9*((2 zhUJfsw>$^P^`hwnL2MY(S*Y17_-#%rA>iH z&BmdcnpT4omd=-VlwU^-a5YtEoaYe>oCPLoOpenm2n&&9rGZZUUF)3C zaPhr)j=;kEJQc(Ep>yWDPnDa>GJMIBOW=nw#?*+>)*x3lYTZ1l>fUs~y)AYzerBHB zbL-@yBB)<0L+~@d5iaQ&GXhZTT=pj6uTu*)GFWu+`YFrZn^`nFWW~?F_rpG^Nkr-*c z;i_qfogfL^I99K8oV0c}njo0&G*~7g@hEvhvW}K#f|#LH1%G)pvamWLjFHG* z)FFW^8*EC|hRkMn2dWxzCg+kmBBR`Pi@F?b!!Ah$BfK zRr-r;P=hVh<@@o~1PC1?5I=M6FvC%!71vX=1S_TA8m^YC`0mz@zQGB~M|_F)wizJm zmKQwv2+Az57d_YEMxpM?>cE?FtMxB!~C zk01GkTYDVkKdrqL%?|Zze(qTKMYU-8@jh?Fiz`63RswsKS39k8E4q*6J$@bqOi?@J zwzE1;caIujerNd1%dWaXJDA=?`ucP+iV@-TveZgPN!|4Y2cD~*cJtxj*YBq_W;>g z)^1)6+n9j~$NAE8hpNjHR#ZhR#mfm<=Z7Q#v{U4y0DsuH06Odd=uB|XtVp=*C>B6* zLhr4Sn5aiuOi12>bn*adnB8}R#l7_rE}#T3Y=NyC`}$L`Q#2?6d|Fwp9(QrpCQQNR z>bLv1H3A)Vn-@zhp=JVa?!;hGpjem7x=FIkN}67$VGoWeDBkTda4t%9JabVhfZbg0ip=zObFDI6qPlL1VObzuCPhe#Swemb z#vFU<6T$eVy6X1PX`asglggX!xmY(Whqu$TSNJDC&te~0-lh=5c&K^iWlG4M7`B>O z*fVLXLuUG;*|+;mu1h^F+CJLT?Vkbub~ z!A3-D|C#`2Gq3$9c16PXN0YRQbE!J#^@knB>m4;L?Pq(;1wsMiz9WJ#&7U;j2&P*{ zMT5gS%dhIi7(e@s_Rl2`#UR&=*c6|HU1@G5>Ew|x+exG$n7%GXDUyBh|44i5sJOaq z+cyvhZh-*7A!u-Sx8NS!LkJGR0~8Vn1Shx$2pZhoU4y&3yW5@Y_V(T1ciui{zkA=G z)f%l>RkhZfV~)}LuV-FPU*j+aSTBnZwC_8az%2?I%k$uH<Pb+YCToH$ix;d zp+7&SG!1))6C~oZFwv9aXDGSATC!#&q92|L2}NEZZx5-cF+Kpkp=feQDgqQJN@>Astbj zFYl_{SzQTnfmYA0>+$EMf#)4oe6ixoG`VJT{-GxU6s~8=3w+G$NAUUJu%>wvShsD{ zxQ_ig*4S=9z6uqO94U(Halj{$CdirZBXStMOn^dom;JI^m2AAhL6;IkOAG3F7_z4? zsI9*#=&b@Z2qx5#o?bl+P$}2C4*cf*PYvv)J$RuUgyT#%62kP35iDB_-4Y`|u0D~y zfb3dfw!mr-geLwgklme?C|^=kjK^+8%x?9Ze1!g!yT(_4rkCCpK{>!#<_LqaKK;#( zrGs5g!Q#MFtBKDl3`ukfVKfTVw4uQoHQ=dZ7#EpB7XGZLh%S7!M}$6;PE=j`1#y+h zVqU$(NF0M=6^}m2iWJ_@jV=_k{g+FPKPR^M>maw}gVc;G9<&tf0EpLjHxiV=^6szo zSyqulqZ$JOr>H8p7GAKyGR@V%L_MLanjwLLp)9H&usezV=jQsFTi2~1p7{`k6W(?i z+iIgaK8Q=5RHE{QZ>z*ls}a)H4t6rzE#SwJa%x;ncva}{E6O8FN?68@4`m)W zDIeh6q%kh-hBUFL9#6zxzG(GypSm8$tGFG@MlEv8lrEqZ{zB#YIl}L8Kr73LN%zDS z-<0`x3<(_H)rFW}V>|Fs8bf@Jpzoe7i#{#+NQj zc`qE~1`tad&yUH z>*4HF!paMUn~-;PJ3_r_&Kv zM*RfuL$vx94MgW9_Ju77Gobt)P%ZoJH6Ez51AIzIR%uAkC8{sE+1R2ekLD+@^tfD( zNE&VrKE$q6i{d#C`=1)2HBv4S?NK2qH#|)YOP~4j3=m#qG0nIEJ=c1nO*OHx;D{ER z&7kx5uq-$t7opOX+b;NUIn8>Y3{g#juRV2U#J(l@EZ}}cJ?(mo;Jny$+`0RCv$`TU z+bSTdsQyISj5xGKBY5OrEvSG0bb1FxJ|nO{tX@TR75;DyyapJu)FfWMCB6voB+D9z zC2PO}-QkC$kfmL0;QhgysVrwWy@N&+JIW9J6$UXe(?wPr_-f zKw;RE)@UUUQHgS5w#ssPMY#dP(+8!{xw*Xk1`jwn*ZjREBO@|7%YK17x#!#uNK6Ao zZGc{FZKe$vA3N6CGcoU4@PpEWI~wFKhi0p6V##%im?!n~UBfr3V?+n3sI@NL@PD(T zwXYr+79Qia6ikO%FnvswYU3>w9Z2EVt~R_wM+Gs7(SZAAFt9Pl(S<%)fQZTKd=O>1 zz$J91ohkh)OwE;7o`}^V{Uz5Bj4i~q5!x+fVMdELc7v(Y|WFpVEcGC!H{B*x&M2^z<%=@+V!So7r%7!`F>>W$GJE0;aYqoQj zx?$cNvde9YNxy(C&fz3)KDJ+Tc6xc?=M!0{%S`?_e~OFJ-r=%us$}P`l~u0Ypo1P1 zMYy80-46S(2_n>vtEZHw3=N0T!v6RKal({U_q|5Kg@@N%=Giri=okyTcS)lo+V$ft zwCjQhncd9I_uBhk2|C&9Y1BH_*)@5(mFpY!FA_BSKtUbi3R$xgb8x zs3oG4wj22UpDIp2@*|+h-L%K2|1fMHgCbu7A3#JZZ#9~QfG95F5pf6+zgDTX_yE(SEm}ZY$;2YyGh-ap;(x8)sp% zGg#L)8PFmg2PZiSp-B03PkUnHF@wzlU;obLTflWqEKAw>!$zTq2cP3r#YOj z)@+9{o5P}uilgqT)(>zK)TxxL)#Ln=YVKk{%6s}S_Az^YW&&n@Q1Y3`doCC4=Utt%$0ZwW z9PI@z$$ehWz1>{24capD!Q7n@sREs@ZjnX+0DE%ZmYRQP^f<8cdWEet#76St8~(E! zOi!`{+26yT|JL~ZH!l=}Vfbo_TemC7SD%cUQO#FU5IiCRec(Zm1!sy_=Qukdhk)#% z=q#^m2}?^l;h#H@d8pK7yn3MShOV=e72@MA61hT{)ULPfZ+>QRhdwIO9+Vv?QjGK- z9yk7pC<0rlK9 zvX)|sw{N8{;_Hc6V+_dJH@V(dhq6NMTwJx%><;`i)d2JNv;sBl3^Z1rrd)SyJ-<)( zofVi)VU0WD=8Nov$2``$F)od=`Q@(>KlwbZXiQZeeEiC1e3vqb>i_D&J&i|k;GrT4 zPQp5UlARdCTcR{LZ!7bKw}Z{CMDWhorPO%f}9-etrS~8v|)y6^Qh-HoviH6gl zWL?;!guG#naI>nbHMAPc+2;XB{|tm={sET6ZP1MP2}kVW1zF==KQ?yWnioaN&#rb_ ziBQz|`Q>1GGw`=`f#iQ0lni=#xhmtslumeYAVT+_61t=VhVLwVVLH110stAEkkrT9rl`V%vm9%PNpBe(}HN)+ZA%LfqqPgZDG+(pC7_;B+6^C!Vh>HwPr!10jCx#6l?D;+ z>e14xiWV{>YqrBor2L%fjCZ_#D zgpdP5GB!*QdR4+ylV=mxV8YPEWplI8^`|7uf?Me?_~{yAfF*Ro4tqHXCZS65@~9!W z%pw!J1(ZL~WzmQQlF~CW#Ea*E$SalyAU=h_01NGDq@e6SjlgW_?q2U+4+utUga?J{ zdajw4fzYmIJ_{LovSM~II07rS zZ{rhamkK{CD@(c&5H;=8UigDQ=bDfC>f<9e7b*)RHl=&4z!3jO+or)pptc^zAxVd2 z2aZBf8h(klYiQo6HtI~SF759dk~F{f;x~t1!TCDos@G#^`^t;kr+G>PIe_3|!z}-@Jz5e* zL_^C4xEYlqy#`lr$&MwQm6CCR|L{`|eiH)SoLt#>mU7_buU-CzFLw4C2S?Ht83hF; zb8T&{EcYS5@0+hLdeSH0ycGu>s3v%tcu2;ib0J z0V!G|>Hy^bM)IXt?)Y!@*qX1$OD@Q`OwF3Q!gPT=*k`Y-yhlN@!8Tawe`#CShvW!Xj17LZjZXUpIQ>O{La^R4HB2zh6P>h;-{sFw;Z_X!UUaL;JheXYB zK?xiq%74-wUR}Oq>h#@c_!%LBbqz>1-`h5UZg>kU#pn@>IZ7E@pf1RYrd9t@K~!e7 zAUA)tm-6wVrYX^VW8S0b*0lP2tGFXr#L5A#V|qSA63tE(+}oCoPQ<|f(c9nuD^n&m zaH;~}#RlIhOb)eP^k}A;JRht;s+%iQK3F3Pn**GG{fM4$BWHCSw5qo_pZ%^xLWix_Xru5H;IPRihf~ z+u9a$^~)!6$c1vt%A&JdOkhEA#gT=v%X7Y8qo)ot{BWYN>$Ire=@? zyWviEcW}O0*Qr8uQE*Puc{_v>TKRgtcEedb!gC(eH^-ghzxOT=3n(TRz) z&I(z-e!1M0Tri3&rndp$=hW+Q{Y>d-*0rr^rCajLNI4 z_03sre+|DfP;W;iB)mPywB@3+f>L5AJQf!d3+TRbxEFOrFa-1IPP0y<`Kt!d zFXJLdSQtW!s07$8hax=>ZT;L;O@jUHH|?Am66Vz<$y^Xvp|!T05c4L-a9+QrNjI=q zNH3<|(df7HBbkhJ!M^tjVuQBNEQd{UCjC{YQ9{<@T~lnxwd{srbT|sj_Cje-4CTcJ zXY-SOfR7J=IClW?rTPZjaWJJ&cfJTlI^mhM$Wa^2|B+GRZ{NusKD-dTmIm|IHLi`2 zkQY}TcBR!?*RD_Av7D)~#ueVE^0eOR|C1jE_o2SKxRQIzeIdY;-#X?Lv)K`lp&!y{d>9Y=^cmrO;$?5TNT2fMy{b+h+`rnHha81-? z-a3ujOdcKjA2x}Zga@=Dfao&HktvYna-UM$06n@UUB#PygOWn|WCb<~Vt{5MPMqmw z&Q4P;Wshh*EV1*pxcJ~qnuLlnVWi52w2?VVgx8U3Wicj&%w#&XU66<7YJ|3%ihN8Z z#y$r7@!Zs5DQndZ-Gk)G4 zD(b89Mb?fnlmdzWZ%^tH8NeJB5?lV4duR~NySkdIRafo9>IMH@8S>+MBv7$=fjRf6 zu$3A@6g2dOFJ}4eGOs3ywCZNZcdUz4Z-*8CX~5wj$3BWl!~X5$x^L3z%(~sZrcS-t zjvz_&N!H%3bh?|9E!ez?=er2c<&l=2vkO&ty#odzE@y(@xL8G3z5Kd0UJ@g#ScDsK zBjLB)F@w%athvCB*iF_e-tmup6p8+av!~MqJ~M;g!_xS}kRz`3FAL06E8Px#N>d*_ zt{&MokXt-T;C9yRaqS0>v#+$e`7spSuG~7UuT#FK-m(+kUg?&?y%?o{bsxggXDp}u zpVv&GZOZVJ6b6Y1Qc}{)x{R4R5lk+~9Tz=lpa3b(7ARuq9k>U!NQ!}cCNLx<6EI?a z0H2Z)okl1Dw}|KCJtx@V6af-8D06UY>yuXL2dRRzpYf8NzJ7u zebn6C@fGsu(ZU@_^P{;|?u}<7GPwZOG&KfJ!}L)2SO+zs_U%yKus(FH=iV%1GQa3F z-}&p|4TL6e2sG`fW~pf-2IRbx+ErKPK>A|;1Jmp0S^oyNj8zuF{tjT`m5ghuzE2PogxYetSFKMZ4$k_^;=81S0gr;Ro;_H`)BRGSIWaEo zlhn8zh3)Z6TX;cDsjlomH7B#xAy~7kbgHJopm$Cu2=p@N*$}(ldv;ELW%Z(;IoU*6 zNmm+yw_m;?x(pe7iC=~GHg@W_3rsx5P;*~mj!js*4em&C!qzvwy@R`1X+y1dg&sIv zOcObK=Hb}?_)?_+I~~Vwz{l0lxKn_FWD47k$rHnXGTN6!=VK0+!{&fm3Y7r&T%4z& zWYP7%U1R_Cc^(;{0Sq?_e6uP2jxsuvXXodcKy%e+0f1CzfRFKqeNyN25YGie0`t`? zagfp!t`2lx^??Q|%F5(nsj2!H=1tY5S(%v#Z-Q$bbkuJykGcrN%gx7k7FlyVTizWd z@2J1TX?TFObb$ZMP0d9G1FRYwCCMPm33^Mb2b(_7g6_lW)k2(>Q{li%h}e5j zine+O6m`Fn7aH7Dz!6{f0%sHM-L_b9*Ur33lRn8y-`~HBy0SixD$_V#a>Ve@cj}{5-10h7_Kdx)X>jO9sz#&^p`J#4e;dCS3A zk28{K7lA8@2@*lZ^E7L>FL>+Zlu62LWecO&coL1a?d!E8Rr%S$&u_a^V&osx@)YBp zlB>grLY?1Zn;dDdqKQY?Oxq$h{tDT2AE920nhVXz+jp?MkyLGbv|7{dxk>J5)x{Q@ zaVHUR44JFe=vzd`I-|E&!ZBj^B@qONv8-P7PuV5;9uF2^ zP5q>~o^;@~!DSSi=Q^NF3Vt4Ex7x})C?}PLED&1LKiTwN7jX%vGpyER@VNd0`vRG0 zH|=@Uz^1Rh7{$rvDcq)#Av9|{Oj4bF%>Zk*wfV?@aKknGNs{pLCZ>2?Xx4y-#!1c4L)R+HchhZFhHZh`zU8UKLa=q=O1x|W1e_gRc3>;ga^)UW>)9#rjokS9|@e5#ZdW@`#66fe_ zZ3M@kJ|jsW_&kZO1Kkk#Q)3W}_>aRMI97|f+yZ+H=8gU1{pIO{?g#{Y9x#ho9HN2` z4GPKtb@O*@Mme#OF8$E(cpd@JYZZ8RA$9|sXUhGesUhJ=2 zqh64UV7w`oj?(2%hKeBR+p+wBANnD@SYy;V$2#v9V2Hd0e*9<*mZD5JsR z-`6cQH7#k56R)DvD~E+q^m|19)lH?>PqpUfKGNCM!8u1d<(FvJ4`-t?zDX5ley#f% zirA(Wk)i6sT=F7VHjn*){;l&WeGE(JKpYxnDYeU6Saut6l%^ZamkNWoF{r`!jDDpC zlSLvF(s6?78?d2vZAG40#)tJHRFG?7t@T%8dG~WLZznyAGp)O>>biqu%I-up@uwq$X;#F zslTka7}Cj=LK-(%i2)V{_jtL zflmtm+U=~wHLYoYlrjV8*1`J&e2rZJlaZCisw;ubwY30ITP5@M^ID&N$3SH&S$kUs zL6qfxvH(yHo^(;tIDr(5g^M+U*W;=>QOrrZEZM6zH!4$?tgkKX$|5az=a$p^uUWYz z5qT#7qNJyWfQSe(v)k;qo_`(a@5ObLfS|&sW={W?JyH?cROZ>^pKn5u6{ahJUnjP8MaPL zUW7ud8U}!)`bBT8`n#ToBeZa_1xl2tY#fs}C`ifnf0dPOXwz-@y*W6TcXMHMdsj+* z4is$Zpey?QDYTL1t04LvDwrw0oZ63NJthP};4@pm9Z_z1{Tc61lc1cb67#{&3+&(T z3qJ=sgLOHP^ZT=FhtQ^l9bR3Y-FMOI< zR9|#&RoDKciD+z>m;LVE0&1Vo4ky+(d0>@PnO8eVM^A z`&l9p*H6fWzp2TI`A3Dp?;10_mgpvXVJi*&#ObEko}h<@kW zLn3QJsx(j!7g6LhyzcOID2GNkA3Pz~Ohw2LiqVqS#HG*o?eaJtbXD4~Q!4FH_G>Ob zma=LSNGt}t<>R!9B6JRBLEX=opY#6`DUcQZyU;17r0lDO!Tb$f@L;B;HD_!M*~r#VpEBRFyVOuv!D4f|GIBQI(g4L_jt!c-}lz6##Nz~!S2+`b` zj3LGLKmJMM#(FolfBbyn?eXoGf{K9+j0%rIXNWzkqZfs0S?PS_z9207P|01=0`iD*=TC{8p9v#UHz3%#fHFqF9X2UM*tXI z=fdsw2yEG-oQv+Fy0s2zKwr7u#{u}=7*cK9xbofbI?qA;09r1XG<+sJ0^Y3U-5~rA z`XFWQ1D}h}=98aV-{U-*;0>Q#86XGv-k4A1)40w*l2cN?+<~^ig=RM!@dcMcVx^k1 zblnpvZm6d5aB$BvznR|e{lmy#fML_304xo;{XGVdktb+zE@*K(jH{`;610NpZt~_k zEiF9uPk+1)YIhmJT;+_EI?a1EHor-YUXBP00lf=OgS6yiInG}eyJ{B%A%pmqL2qxm zjeMny&JLs%AKV&Ifq=SCCC{Ff&_Uu>*+J?p23Kci$CDN2B;F(_IVi>!H(&Ea9{=#DL0))dRSKd|`h8uf`XA#$WCL;!wJz2yi!M zi+3cf=LV$fV7{W7X|9(0Skx5L9d-vsXE8t`C?Vx;dIa1jhNW)qXtbLE&;gG^TkKUv zP7J$tH9*#wl6@1IJ;!!3qr!VqIi*xB!iddK7S80cC_e*H;S78{h;MtV9>)|Cu7l5X6-wNQ-u|i6>5b}iD;7hZ)E%yRzGT1j&DCSySIqeZHOi0AUe_^ zoAhbLsJfYl--9+!r<@~*gW`V+vZmn4J%;Xho}r9?c|bWS((BU{A31!Kq~c~2i+y#A znuX0bA<>loGt1N3(C}dY2czo%i?rTRWEnDt?H#Ee1@=_Tt|vb1#F}`v$@1`QvrnLwad9(R(g|6e-5YUp zoKt$N@I7=jU5RxPx2#O^UzTx94Iv{0fEOo$; z1h3*n3iNe5rotbvyGtY7VaeoQKaIWmt$^B1@@dQ!*P+n|09KMChH1TYE$*mbK5A|}<81DuCQ6Tja!D@+O{Nx67D@RALK z#YzfYrmY8Hip4vT)9AzoY@bUAE~N*rJ|hCt@qhq(Io%DyZ^8yIn3>z_G!EgA#!jzR z@7kr&x-xU}`!x_({!w(L4|@MF@NaDWvkj~>MSKOXP7&-c0A3<;)tKFZW!2{$UKgrs zIF3p4Xc8x7>Ul$sF}sP~KHhLbD$#GHTKFZtQ#&1GMqR?ug@1KQq?e2+z3Mbc7261% z0A2%!H4w>QZ*Q>sF{iLIEZzS(W9VzL09dyxyYXT}QH&B`X?e4#aYel1PIXLpC+Y&j z&wPWBr<(hN;1D=se7-GsRH?WJ5l0k4rOKx_dfdJ|_}J;wO%YrEgV=F@rt+y}sCGo0zR;LvunqZRgGtb?$2 zsOhNw?x<>mX3z@1O2ul8Rn_Av5^Jp0F56-Hcdg3WQFiW4hJveA-cHUYb+xcPwp!_` z-JBgyzjZe6jdO+-KSM?aIGc@~|K^Jsn5v8PYjle%OMbiP#3^3vGEt@DihX*c^zK$( z)p>=ge!tI6bFZsw7!TE(Mh1QveUG9zjH2=SVrCkuk`IZ37VWjf`QlB052KAjyLB!^ z?YB}UoJ54aiIdy<=N_5Ie)Wk2uhk$ulMXSJccbs=knf}4&awFVXz9zF%;-shwy&4~ zY1$y!G2MHU0t(m(vv+DKZqe>Oecb}Yjo*Lnj54a&zQO)-Geu)v_#0ifbFi)aH2H)B zTUOok41vaZWoVJcaeT2f;13I|ttp0AwO`ERrho{1y7dJ)>v zD*NGEe_s3W3xgAlbWu7ww^i;d_Z!oV^0~-8j(y~$GSr8NOO$NHss)OJdJZRbRO?A^ zbGf+IRXZ%X1i>LqMEuvYm5MWkp1(zD?5tkw1HKwaIFn(Nd|VauJ6|E`>QN*)gWh5fz^$vN0N!}s=g6lma$w`?R?G1*}*jKiM_@bu0dsgI6L{;;Xh1|Y)jC+>Szn~ zmusKHBrzUUP*lfKQc%1Kcs3cggdOx5jNpDTHeQJk=q~Sl>7j@XFeqt8M6AI)7o`r$ zR&QO#lCMM;hXB6hXB1?g2~gmS7+aw?q5=`cbQOqjkrD{_w0wkAVh%d)X23qDOf_fy zyObNXz4%Er(Zv%155-uRk!BUQv(!NTJbxLU4_JV=sggpDRTZmWv>{+mB5e*NQYpZA zM5b;asQd(s?=TpMSOf79c7|L0>XiRAd%i-Hk`mb|H=7k}I(UuZ_w%t-%fd=K2o($Qz~T zZ{A^{Z4xiZ$|VLFVr-sx$)8c7DQ1j(7|m!DcbBP+j}gRe6MX1^OAIr89jZTB=N(bR zD)?e^+B7xOpBNJ7_^D8&97v~n&^Ye2=jX01cD@PzNU`!U?Zv-+8X)QV0sB*cOt9j>&ho3^ zmk8Qh!h7Z#lF#{fQ)Q|qV@OyIX1tMfhv>+$hhxb|Gc<2*iu(jE(a3}bWP%CK`H-0S z1xLE0WERVGIcRmrwrkAA|FX|+1`#7*h@q8$zzANllNK}Ms=@VIU5mp!feE{i}2{b*+gwW zK%dplu*|j|JQbw6$#IOe$6sW9bqMj*Z|iB&6P4<64LD3jtXkad&;Bn8pudgN!3*yo z0EeWKi)RrRtLMI3tARzr{-dJ6FAmW4>A=LM3zKf!;27qIg!6LF$YMN?0$Ne$wEe~f zV1%~;ZZP_0t}m&_^bBEgT9FE-4ak3D%$Ep|N$HJ%*o!FHnEBg3WcM2Is`u0A(B8}| zTJ$$O-$HDT%2kOQ-$N@=q!@hPU+;?zN-V&#y?t(<1;QM9E2@DSCI~8AJI3ff;Nhpf zOD`p~gdqQyv+#W&AYNAXF2eNo1j$x8_M3yHXgYiyKm+m#1edB7>TuUwe6J;0kZ3lX z*lBg+$ge-X9Lx3@83a!`XB}Y4^y&C|;ny3s`__16XSL4bZu))q8H@lbKR?_4xmDRN z#O#k;cSZs^56#Ku+gE#E)P6ghNxA(+Q0E;K^DIfrif*AJOn8nkSE&|ZsS9T;&T)6_ zcxo5`;jg`8l2MS9he|+(PAihL)=CLSE=_J!Tom=X*xlB9S@Kjm)pjEvgu7n?tUo7zZeI>nY zX~osF(&?OJc_g$?=Jh#^NOnkWDQwzG#c(Ino%!%!tL;~opADa<>#tl@XsSN#5ym%)?4KiE<3Crx{NZ(S2a#w+!(#;lExd7 z2qsfj3br4*ABB?m*g~2sD-p!`M>q>|Bd)z?Twd33=oQ;+=I5o z8IThG0XoZ$V{8c~mlm~4z)wk^wdOTRD6yx~S6`|IGPhIRL*MQaaIR;wh}l(nJYm-f zfDsfF%qAI6AS4?FqzEaW=M05Snnk}2{V__l`V42`wSmfX2kSh64_(j)F2&`$MXgI- zR<=;ea-07sU1x}Vi3ujzLsu^xm@;ssoK92-|7{M91D%_j>k8ece|^3_3#Lmzrld6T1?xOVMZrynCx;(Su&m`zRuzr~VYW{!pd)%pNh6aF@rmjeQ== zkw6=}JJ7@oLSfiHR<$)H89B`ze`-rQwi1V;%!-ONnc9?;tG{5Ucpeb2vM!YbD9`U(pZceTsI>yj+?TBbnrS&d#tJ}>+X_bM$pl-hM zH5TnVg(?jLf3j(@1%gU>OQx6dI>}*3_`%N%7YGy4sc(-;&anlAP1dgJ4!i8ao#Jgq zN;{O}%lovmJZRePi%)eQQ$!juNy0Z)i51HVv+1r!j&z?L7Y4U}5!vjE7bM*^z!K;G zjFTz3|1p9-D2ZFV}u7}y5O^9a{+=yR`yuNjona`5^kzB?N zoG81wE47*bFLBR*IVc6w2=xN$1Im_b&#GM^T!ZCSjnj6B% zgK*TB9w0$$A&=*`gRL`~{X7M{#g6qd!&b$?H(>RA_Ue|DDIY{=2go0nD>y?P#y^#h zGpViCsoMn9@=ja7t6Z%{23)=CKhDl_gXZ7!4}CbMEE6EhONPHdn>WQMzDQY)s|dz6 zWMC+%e6xaTruwfd!LwyJw1?pkVkEUZRV6YUM5y<5uD6^O0W(*`^H)Rsongd`VN)&X zl1+&>N|)C22!fp=qN1Ah@w8#p5nn=X`c=a(r)RRJoiK)_Ak@e575jY$ztA_wb2KAC zz^SN8hA4b&EQ(`V3J}95&pa~DAzF?Fn>U<8Sv56gaFu5rE=U==uJ)UBqGQjnmQKBl z!f~BDke8@T8e?NrC6L4?lTt7=^;g6=PRFQnji~*|E$+#t)b4MB$C(iTrf%W1JP`^t zCv;pWX&E+6Vs`dTpSN)M)edCs%lGwrj&rC@ORG?vtSgTRx6}^trPhmfsk(@7=B!7iY?EulS`W2b`r5IV0%x7+v4yy>^Rso_4M9ckqUD1B4(Uzhw`9Rt z534mCYE^hym;jB>Mv6a_t>d&j4-ut`f85}O88^HzxSLot@AN-T-3jgqxx9;rOj=5| z3tSz9bjk9oP52M73k2^a?OqQ)>Nt%?dySTAFMnN4`4#Lzw{U)$8TkB#%F_|w;GS{~ z^QFke8u?7;CQqw~ioh=M-85X-3vg|HAdnd5v@f7%Vp4=Dzm|EG^aIGDUb|l>2tD~DO!TU(30vf< zn4kfAz*PcQ{1g*=5yX|^v3*i(ypdKB5$@{Pdv1@}(bGGoId=IY?z#B>*B%?(_@NEL z)0c)Orh^zZCVZKx+ZqGcO3Dm>J|^8jKEl|d$ivo~cFN1p{HxRdQv*S$xCZF{F?{lF ztxMABhkK9E%;BMt5YcXgdK!WJihJRSt!Bpr5wCTv!}Ndg@NrS=eJLe4a1# zQI)aVq}&K-gPp2?n7-J3aY@QlN@+qcCF7*$a7_Elf-w)BN}cHUfLuO-VjYoM{WS;A z!?-CB+kMD3U|EbpIiqqjM+I|u4Y##9`Pnj+PFiE;T-VWso!%gFctH334MKtZCQ0MG_U2i)d}ytY9>y zT`bYd35U{rp_C)SHyG?7ty!gW<*#r5TwLHXPo`&YRZ{#p?Tapk@l`kfK5f*vuQZ;E z>!ktlr#u3yge+#Ut)YivL|WF;Z-I7_^06C_VSh!mGewt-;G$^F#W%iZscTbjum@Lq zwyux7rrz{mmNs=iJVyJ5%2>Bf5+_tO~*9L&^WcO)1vtZ0s(l{%jk$l4v*N) zT_A$;^74Z(t%uXaCF+sTN^Fztfrc&cm5dRk?3w=hL;{DEdHuB!_5i?~a90iUx2oqT z3hTM9zjEEqj9mkpQ{OPiTiNehQmba710jXYue-))L6TK}7Nwm0W&Ao7?cp7?E@J=( z`lp43<)lq7`&6q#c@(cxf`6o@w+xhqtjV&j;Wq6i7D9=3`6RC4_&m){r{HIhNBzS- z&~hlK5JAXiiEUHogqu<);E`QRk$2=3Gd9G zsS^CA=6m(_R3ndDfQM4o$B5RY-EWG;Y(Ym(n;)7tG*|Mc3hisf{FE_+8+{UNSLt$m zLBn6isyl?6e~Md5S39~)F6)Y1_7F$VjB;9~s@P7>4&I{iQ>B^o_VgIjd}M@4Tj&VQ zSDK7sa$VjV#ZaL4K90y-@~`C*ihnE2bn<(SiFpxQI)y~i>=k=BY1l~h?xMGnG5Y-tsEjiEYuv|T;$_3oBo0ONI$MXu~VMz%t zDnWDLi_H(96;x}W#OgW02s>BBalzfV7Ni6Cv4fqX>Icr7hlBstfjfFq~h+Q$>_j5Qp)NCn5fDHV=@Jmcja%T3isc2=xEiWjmX^G52)M{e9jz3xX~$G`UD|GEB}+ zcP%qglC3&&-02Yi6*Lxw2MxrOOpbnWql*qKnJ**|@~DY&j@d#Y8Xo#xXwJWEbZ+U( zsz4vlD%>1DCngNX)?0yGuj5>AWrR6|1+F_J>f7(x3y!+MqA3d(v4%V)ErM9`;P4Y* zUV7yMRaxoz2yq1~#|O~AV7c;dQO;GSsH5#;)EjfQT(lmMxIY#)oGjGUY<;!w`YA(gpclOFJE{tY~NlckeQGZD?@Fdy}ayPbkI!$Xl94H)A^2&PYYV<36(5e z9FQ~g>C4nAa*s`p9sg^#xVL>6p^M#RSnCQO_c5hP%w3}w&gH^^^4=b||VuPc^ixt z22`e+qw$+vz4?Jd85t_WmQ3Sc0lBScG;?#p!?65;SXjk(>J=!YhKIbIw|ZBiR@y|l zudd;|*8S;ZeG^ti!edOPN-li9@|Pc*X4P%JW*MNG$`mH*V9E8hxM=f z`M-wcJww34^9CoJ!8O>!l0}cp*K${|68}14f^3KLtfy?B$2Dg7VQ|r3fVHR$4Sgv*%y#&rTL@ z>{NkfT~?9PQ>1j0r{}6y4b~F6Nwwr{A&sPdG?YE7_|)?-oof!z!sd1Pl@m?WT#nvKv;B@Rg~9%$nflT_qx8_Iw!FEesxezkS;Nwv%>anMjpTQ z`Ym?WP7PoV!l=OUUtF!e)NZVIo&L7@&H{W&hnU>&djfYclU#W-s@|D_52^;5O4$uX z@9EuI(pe#CbhN2jj1Ba5MUQeUFVT7jA;j+#AJJ6fa^LjRw=sWC zw6;~xe-+3XjI_R*xTI+#3n@=YlBrZDmM6+(y{;gJym73bvOY+%8Nwm)zTEniL z3T?G`YdD;JLs)2uMb5h4%b(itd?-$=FpgexX-HIU93nHZ`_l1Q{=DToEg8vDukpu& z@0HJ14{m$#1=il}JzLx&XLvoVEl^?WZ(Caun)pPYYh-a~G{IN<>(;ZA*QlA41qqUk z(lQlI#cjJd-+fr6F7`4+GrBb0VQ31!3>sTr9h`dKez@^o?S3kPiqiEwHeAG0sSR?1 zzN2=V>RKWl^<~`R)zt0Bidsdp)ASAjzb|u40c*t1*fi;E#$C{qQGD|jUkeXX@r0}y z?Pi8DK!-Nt1|LY+5kJYi4YhSY6cupiQE>G>j@}tzn zsXWOMbu#tQn)|GB3Qq)pg-*T)9F+YEjqG7eWqEScvTYb4C_XhtNC&&-B;q< z5p0tv%n|G6DB=C?;zf2i(xZn`RU^mw(r-23>$bJ)bj?zZ`uVzqnl=qI%pIfR^h^!EWj`n_NH*l z@!HQk1lzndJhl^q5T99qaM-MA>$OyA05azJU@7)pdirCKG&dYzW8f44Y8@VTq%Fqr zln2o6yLH|}pcVQZ3;~en%=wKab#X`A>>E!saa61Ne>ElMjmGtYB%C=$s$P_ZoU(-g3f%O?wKaM{)z2?a~2n?#TcMX~1U7a&!S9p@epeo1lNvUz`^9SBRX z-L2`%X(G3Fr$_)2vKbZb^y%`*NeOC?4O-?f-h~XU>}^)vDvtj6g%>p{8G->#TD{%q z?d1;B)g?mA>jGR(EAsyGv+mI}tf&haiAnXkWsLwe;QXL-)l?SF!0LBpJAXQcFF+kV z-t$gNpzS-|V~omvO87{s5Pl9+LrHIvQ>mi09;r=0waAcld_CdP`vg;#GBh-}2P}cm zXZg;}D<2_dq@1i-#mnhVtd$!ag?=AOiNPYyZBs2=H1_}tPHR$%U?Hv*1;q;{?h(~* zZ3evsT4(Y74|Ng`hJSr;#~~kj4U)Rmuj7U+iJ5sX1&tm&4So8qg4i&(OJ1O8kVm7l zfo;+#OuELFHL8h%Zq)($M2Rv_$bbQ>`Pa~H3UL=d!(-)K-Rc){D@pi2i$8oDIu?Es z^dLjm!Rujy=RB>%g$eyblBG#yG%bI}pVL&aWbDnK>H6eniRfDE=dD{g&GQe=mOt#A z8yFzS5OB-Wk@F>8?4QLeYU#6l%X7A>&pRW`$#>L)!8fXl$ ztsYgW}eS09KAdyZ|CI3$m582id}{v2Zy9w(fZ+_%T5{){}rkM^?xb5ii~A zu7z@8zm0yqPOWJ`x-IbRq)y9@Yj2+BX>)&VIt^TVv@Fq!`7`^EOX7r<~+mxU+3kRI8e3E%i2qU zPon<4NAW{a7N1E04Dr9P(bZ|7k!_1T25z(F&{;u|%G`e3(cI>b zfT;3asW&!II4fXBTcou(Hpj(m$HThFG{!}{Ba*gn*yWAKsTOGdkf)rigYRv$K^zDp zUNV3PUjJH-nKj9HZEKY3Og`)~1r(DR9iRsxZ+0ez@*|q`!`z0FA|@X%s*hXqvR-b_ zSSA4}HDJr*9eUGod$lem8;K6jDtyppf&@J^9qR{sf2ok_9qn>!{+bl=iKMMxVWyYOy+5LjGl0Ard03P4NIpWo|buQLg?6@U^P&+R#B2i@=wh>^3i z+qJBj^q7vcm4OpvTwZlnn%vQ)(ffR>^E<^pU`uxsDaB40+-vO1qz5o8mn?c*&-V68 zEQcfMnVB&cz}!=SLlWSb9$K}e0N2GY|8q`Iibe4DH`#494y1IPQOI7)8$8Itf_&N4 zqMe-R8t+%rbg!~b0FBJ*Bpe$S;SraDR3_G>e?;bbqU!0XgW2nmh{& zc>L17JKkWTce!ij*Vxl{)t(JO&x;=8ece`)Pxv$`^Lk&%-MBfQ>6?;vN&OaSb>w8z zdSeo!PlwuD`=7F8Sfu;d+xp*yUxR4bp`Zo{@)#@GpGjDDvglS01o^GRNI9WwaJ+cVi(&`JZ$M_i1Kegly+GWyY*o&8G($9D>-YrLm)?Q(o*$5M(BJ(sAj!bMK+?+5PmcQ5 znd{hncfQ#O>@hv&MQ)#Op?!jL(tMwR+BR1>W@AKrAMiaCYFPY^nFG?L`WI0 zIubHelg^jswK2bOO5+V`nlm+8p6Aw{o&9w7-1pw1JtVK-#?`VxL|!B@WZYqeRCYR$ z5aPM_eg5m0sS_mMVCyClV%?iZYS?At9OILVBsotLP)Di>G#l*4a*1G1zGdWi-0Npu zrlG{6N(@~_Xtgg2-)$_R32yj~k;zoOKLHO$dp+2;0ml~NVj1^m9r5=|pcz1- z8Sd#tWxFq7mx=Ks4A@GrtnqRP);su^Zx?Q@$i(+`n|j0klb8JaDWPaUt$W5c*Ka&c z`9K%v1rvWx@~0$Og#TfP47mL8%Dw~)t&he6-{1YS+7#N(WP_GzPZFPo-W`c})w1#R zf4WyK?Eav}TF$8gy+NOLM-;SJ@j0~of&z5m2B3T=r(0v6aTY{U*@Cvfj|_Cd`Qqv3 z5G?yJ|MA7MpA+~E_T8A9nSH<0qS+YA8!k0yc-F_*{HWPszDbzz1z^q)?tIArG<@T# z?DSST_A>Cv$XW3E1{m@G7hPW(e@O;hYH9~3mNLZ6Km3~73|g^K^W6P7@OE9xmwWx= z9;nqK0Zs~r`*dVv|55;pFCevTJ-L51^gkca|FD$bf265FT0mvjX016O$^5?`(0@8H zO$<`NraxcI3dw(rhyUpmf4i_laT*?+*CfHeT}^f}J}Meo9FWjbuB4HWkSKUh^2OzF zMd7HcRj>27rCj@e8i@G6n9OfSK7@!{SQG^5n#g_p_=H9A&tJ8qg-3M-Dw{|Mh7Rqb zVIC%%o10F6hbSj@JPrRpzI(sl(Z7Grc0?sXvAgeZAKP|K^3OkkECYuyTU7LL`89E- zDw#9ApkZ_=1n9oy8L*@SmAT+!98sQsJE1xE9GcP(-V+rW->&* z>&0yr?0)?CQ2~HQN5tghEP%e4ThegfQU6Sp=HWwm$pf6xdqL(OLGO&8Dr>pmoEKDfW4Nx8r2696?sQwtpIho;OpNc}m-O?usW@Sj!xxL&m- zH1XsJ;tg>u6VR_BwQ>xh|BoW!|CFbHXpXcXj=E$p0mc}@ubREioz8(g4QOr4ie4XU zSc7JDmrv>Y#|W@YbS5>hM-vZ-0X^>f08S}cC^-?)0|2#51nOQ2VC84PJ zD`6`ZYD8^x*aZnWzZ>7bHt_yDBJPR=sEO7y7YW+tSoNyEgZui}^K>Wfj`IwV)6!s( z@qA}P+hh5LMAP4SAWiKQj7})5SPu-Ua<0kS(|s+)Qux#anY*Qp#mSyR#atnXJe<%U zybkwv+{d+AX_tbf%E8jrjf{7S_eZ#XVDrUiUlI`oHD>)pxX8 zR9-NNGoN(?3j!=OwAc3CuB5uv+1c5)?dhBSGi&hdDY#Rs-wyG+j4tZTH`p_Fs--%% zS?6Sa<>xaHlz_5fQf9rWG6-&J_jq%pvg9cU{i~lomjYhY#4wPG$cdAIvb+1leK|wL zTAPmw0-yPNR8`|bO9#vqH3y!s0?c1XcR!UxaZ9?A~{9HaDx^0e+f3f`Hp{h z5P1YnPR`-aTI}arpUcbu`2m%SAIgA4;JqKfvLZvrfE_9VV_E?+R?iS0;KF?qSU`Cy?f37k1B%X$mBl*QWBlh*X`B_gS#Qmpq^x?NqBz~v=^ox=3FRz@5IP-U*=$<#Tm_I|gG$*^2h zG&9Rr&Jg^WXF-yn_jr3NlaV}_}*v; zy6xEpVsuoYI&|j1#v<%+k(V6+xyK=>hULMkqEK{MFo4Ma0L@_r+&;Q< z)D6PcQ=a2ax@*8hmn>#02Pq751DigFdky>bm93&do;T;~tHVm{Pw0$~;oZrR8jHj* zPy959^Mjl3q@YS0Pj&YnijLn!Sg?j%iznWG#NJVJaBy%qZseOHhMJcJSwbTqJ_(v2 zvCTl31Nh)%Cpz3y30u3qJ!g-f!Ke^03J8Fjz@QP!sfmdeW3;BCt~<#(-^yj0c~AAa z)U|6aKg#hWE3SxH=?Rb`t>W6`8C}(HmvXmyzlFpRAwwreI?gHe2idwR*%8iukL1OM zjk*t1(jNj%C|(U^WAAEFm}y$ZyP)^sV*YnC0WWPFniq!J{V<2DrborG+m$S zSJBh}%GX?}br1C)5_0KHBu&<*PW zA=Y}SRj71VPW1NbsE>DFR59#LiA2jb5BX^T2AiY(sdk8^>F6{%4;YIWRz}<5-k%4$ zfEL%_wdFh55j>TWe#(-91f(@d)mj15gpD+GFf%ubzjJ}tUwouuQE8dIG$rRgEb*Jv zfMEO|?(9A>0tyb*ePwlob_|k&)Ru>xQ5TYl>0T4cZ%vIn!j)2Vu>WsQe;0%Oho8cE zr{~GV@Zy5p!NzBCmxxXyY?uZ+DlCj+dNKG2=s$3q>Y$npQKL(+3V#KTW-Q1ZtdWRV zI0V&90Wa{Q#UBxwP9Ig;dlGm<6Y0|AMbMQdfAVStuNZJI9fG~xz1jz1e{caP0VVJm zIw{n^I8lpK?8!Vk<>S%pJ zlF8|L(#gsBwQ9pB5khFfP#i zVXc^)%PivDr-}gaS5Q`d4`NCx4w3s)a%y1?J2b=S?nG7_!zBQm-QX68^iY2K^hw*n zOf{#MS}TuWGIk+IW|nMHX|hr>TV+@3EC;B#Wz;}c*J0FnW$uroKvEuQow5_k;A>Ks z@n596Ei!O)x-8#h=7+&cfsCNO(Vxoazy_#UzoMb~7ZH{TPUhUA8|s!m_lYnipZpma3bgO}>Il+BN z6C05CaYlemf$wzsk2MM+^*uH}JWwU4YTn>hQc&Q$HirrC*nt%63Bnw}W_s=)*3E$} zz)H&8c@Q|rOq@Xu+{f!sR=2SXRvi-VD(tX0_WBJv9Z==si7nSIBu7$<%|UL1X-Jj~ zC=e<59PcWF`;_qd5gYzB8^5?M|Fn3HB{}GXX-6U9J_5!VXFvKSO>A#T?K>-sOt^wn zcfk5EOS-s>uyY5c;G2WAH&SAN2}QE-&97yu=`R5>gn+GRg=#Mz?&w#h)&^X)yF=X!@*nU>$V2pXPGFjtbL@MBvZ>=|heXz?~GeZY- zzp~Fa{9O6KK)0M4#a9378%Wzh5^h-lSK;z4%qVit8^|4b`;fGTy%HkC5k+me+rTd> z98tqj4!n<#zcgbjIrq zPf>%Tb?k-aVHQJfNK#%#O9pA*9%NkK_mPON1CIq?IbfoMoYt z7ZrkcZ;cg+m;7AyBNH4>KP(?Z>h`2C%V#SIZE75_j@$BJ!7O%n_GKBiv8EglW=weK z?!zi*f6Kk`@ckU|+YF#Z0$A*k5*O4r?3e=u{m?oJ5_k%37GsxhEpljA0)63{8Pl+w zC7=z@DXHB+NgqY~C79%_AkCi3bS6{8b82?aDDsQUO)}N`LTjLf`yAB$&=*K5>P)>8 zddEi7FLE}sOf+IjZJ5r{_6w|y#ezIAnfS5onSK03$n{+v0I$VxA;a7P`AC?C+JqZgLidnS-P`;#^Igg&>Ruk%=FRLFnflCp=K55FlpnQ)yQ!uK~lf9@e?WyLfV@=e43;WfcbnKUhc~ z-X(NRNKl~m^5lmJ63k`Xz%r531ut`#_DV(vwuoeCpRtQ#=vKm{uWW>LzycmT>mVqc zErj7clSb;IW5{v$LH7ItjPD4RU5GEWO7)q+DXX$)P2Zn@iRyZ!MFC#LKIJb+fETS~ zNSAS;M6dk-d;_J+m!(-bD))|+z!(u+dV7vgv4>;}&l_#|-M+m=3I+V19H31~gHy@f4J9q;l4+*P#02cS|v6@pIYx zQu!)ZZ0l%1%x$mxhzoMIG1PvQlZCZ zqK)QRh(B6)l&JMiyX$Gf>iJ;$PdwV%0fiQf{ZW;HhNg}Nzm*=n6CEt}n1r4=YBwqZ z^S=yaTTlTeQVvAWf;okl9>7A;7csKb84(pmU@9v-x|F0Tj209e{Pw!C3k~6UL*LDm zcfamJdndqn*&%%d+Xe4P`!I6YMa_)wb7Pw7ZSRhej*oMRh8+WFOqlNhS4@(<7gB3a z{8!K;O_Nck4N`A7MU=6%EyinKl9|tvkQeeiwXGy?o5ZFRtPM1+f`NX$-Pqz=V(KU9 zYi6d%^~R>>6GldoVEdJ?As&JK@-=E+m3nmZ^{&GqU>NBEOQAE1UaZFVxkNK*Vm_DF zKZ^K1rA1-?-#lB?bU5L~wn5e46kNMz?CKo$p6LZN;%n*TKBsz*?i1dy7g=713Lu+w zgSw$zG%P$uQ?a<~03}}^g8jfJ-2785j;NJ)J%%aJ3~`%Jo{jO*ai~OCF!H_rxf|IP z;_nCY&N|nh*Ab!y#}YY44j>5c?YhEG(`JMBy=3sNC z%H!;tuU#9GSBd9*Oyc6=oB$uD!=RNvM!f(&sJ>IB3G4 z^>Ph~%O(kq!jU8Kx09o=Bo4j&-5dS8&j?I_R34FlWJ!ZRv^>OxKlgw)%y6g+`4WJw zdy8XuF{O)POBkVi$&*7_v{*q>^N%j{jC{_`=}~1N$DLEP$)v;mBxvRAhetngLMPcl zf7BMKY@;V|nUcSvZaG>=nVLX&)`L8#TazQ=Dg*n~!U<8d#UK-^LyJnF-!B0EebV+) zk9S9I@~%(g4z_BdNXEZO)C2Z#i<24Wfv;(O`^d!l#y(xqlpxiAJ(0?qHtPmz)M*3D zD;rBhgIdR&l#`=K0y6{|MYw=x(^|V_G**Ghv_Hd_y@RF5Y4It-2B|J`f+wWamXW+RRN6%!mDGg1a<)*^Iq!jv)C zD>j5a0rZTjKNECqZ?dv0%#GUnSe@IG`PdfpXP+PgBAtR3fv2vTIg-fSN{nDQ{`ihM zvm2P1MXtX4YQi0w^hXdHf!SJb$~WhI&_q(M)wym$bLS9uz4&W}QupW#5 zqngN`z}E&fulw7!9u_LIk`MX$s0HQ%UcbWdTzMVlX7-l$btK_5R_{c#L9^=0>!Z5s zlHNWhpfiE;rMUP`mybkWbfScSp!O@$flrsV%s^~p9#AWG%Tarq$vV;93OKJNH-m?r zf&We5#(<);To|Z`-1U2xC%yw*(zv8! z1jNzfrO25i>I{GyE(ebZROY(uEGZ+JOZh$$p1s*Ny5+hq2GB!1$cXn!oE#FiVF(Vj zJ&1x?tVT^x<^eXBPe^68bJneO_}xfDJ79Ym*}Eorx7@JNm(9-*|CHNg85YcueP26gpdWJ^bOm>D#GJ3zW`~D zMsjy}*YCOho?A}mO^fH!j$ zbXBVxW}5HXb|0w8X=vo!ix-!X3#i*rg5VMFP4tQS9t=Aa_8egQT^M(8$eycYiOzbu zRd35hQ*hE}fUo)}o=Mf!x25%1j@zOa*X#ZxHeR5Owjr4iVn3YA69Tu%U@+Qvg>U#$C@p1IAbOSJo#mbNu=^dv!4RQ4CQ*LOcken)YRzUZ?JJ>P>X zJDm6N+&+K~IC79QFAmV9x^urf1Kj^yfe17U$UQrlrf#UqAkOS)-On)a+WW7vl1Mn| zbeMLUo)opUgbq!vF@QjU3sc5h*gU-}rj{n}3L~F8P1_W2z?$q+-5KO4fZL-2jriqw z?>R_C#os*|=GgdL6&)U4Mbj&6geD#vk)lSsGFxRGKg8amLypNxY-;~AW6F^*>yT82w3C#6_sLeOVuxzY-sEFt3F=_-b zOwO$kysjHzVLcU+#YkpfwSpZ?jdO7b2K)gSx~*V`J0k|ng6duzpMYR?4l)Z5CHfXg zN{@Tl#xaWvMYUX?1gKQ4|1{hGqnJ~K_a|c2{cfIQ@Br{Sa9=BIXat;1udJB4?Q)JV zQhXbf&*s7PEGiTw;IT2pV`|cx8J3Py+~Er`3}}xo64}cO>7H zC6dAD(wYdU+O%68ZwZj;9o#?|W&3(GVM;GMoC#)|7GfP$pa;d#MW%5Y2{i2P8Uk)J zSNgRlV|q`Wa3jGTnyq-V`HY_7TiB1nObW>~VyPgUZCcRv74*JOq(7PTUyNp93>sF-Izt z?0{`duf{%#y7`WoFUFf+<-ZBx@c6I?exk*oj_%|yZpDnl-OqI(_BKyu#HaFDB)!8~ zh$C1^!l`@?0P8gwXgP4dwMEdw;iTP9aRw-HS4?z+!CZ#$c_QNj15`dB4Pw`gF^~`F zFp_}#Q3N_velM)Fi}c-gT>_Xbu1KNrYn@l_@_kCWk@OXi1Jk;rejyPx@uIZE#0S2& zm-EOPJN$M4-FXPyUp?RADs>lC+w;hY3?a8tYs9-=vGah)I3+d)ZV#PUx{?(O2gDH@ z4UMxWCntvs2u@e-Trr7=7-WKUJ_XE^ohv=hfnoB^xtGHmx^m9G9T_V%un|6!G{$ZZ zMX%}uW?CC4a(z4^i@7tm@DhH`mv-iBh?7)rH1T_|>NC~1cJ@7v-r`lR-E?(|3rC4j zbJM{bM)emAcBtAtEHZ|o8Zl3xZ6hMxW$X*u(ia#$-=<$*?KR)}aJygz4gar?!T*Zh zxH)t|kL-{887|}x8hL4SnqZ%`mN;P*_zsv94I?9CPj8}6fD`xKEDlL|;klSV2JD`4 zB>bOm15FlMi;Wc^Ta1L^=USlBo_*%iKotO{_;8keJF^7Bmle^z((fk@ct*?swpdn~ zjDX+a3| zoB0iITqIvT*^YwKCW`JImKj^vE%M`mNVj3YB`fjec3L(|PtZc*t zAL~}h-%(P=_X4Kh55R-?#0M2FfQfdpb3N#F$U5%vIr0k8ICfHZ`!}cGg&x%Rv}?gN z0pk65mZ>nw^!SN!Qqi)WF~qX6Uro?Qm*`z~|LYj232hLu%z~V*)(g!=O#4fDScOCb3+ghs8d4O64^u25o)dqi0Vp*dx1vkdUIOtZP-58ivP?4|K1j@MZ0Ui9|Cm(d5~tC0qn}!K%)lng21opY5REax5n#Idj8kv z^6w6w%hPakYe?oSeF)>D{>a7r+ZP3xfdV9&LGQyKOsnB6r5sDMU>y1#v;i1+c{KqC zJJa2)0r0?9B`0Qf(*3*A>|c-jSBAogz%oU;-aVoH{a^k4P>_04bcN+pYquBm%ga7XN{2#}&7tn%&g5<3LWT|z%gW~t!Mh_N; zKx)B0N0|E{2G$dIARY1cs7wvLP5JlV`foma;e*-3{iW#R<2PCGwQ+xxcfho=&2U?| z4FLK98KB4lvx$Ab5HP8H2Q)NyJg;-DwJLuAdw$PS|HEfBR3soR!Epa}@b~LdWb+5C zQE#K72!+QblGDH<3E-1?_wJqPBSK0_Rv;_*4A4f=!%DQva~T*J6K2pWSN@&-{qM)s z0?^DXEEFF$?k6tLf6x8rd^FY%AM{wkSo03%Pyrba)+Y7^kg-^>0R!f7k?+}!GIxHz z(EsLhxSzPJYzWe4LW!~7cfZ|Anr76NBesqPpkF;eH|MejzYj$X{E{Brsu1%3_lhy7 zL6EX%u|mlIQsRjJVDwYhfkDZOXdf^Aha`NskgYME0$6R(m4?OzGf--e?jc5h{1bBpnW*|dWF(+|4&z#&4C6$BkO_<(2gH24x4vQJcjLFEfJi_*Ku*ekNcj4uyWb&wZ~Z#WRCRUh^QnX$B(oJME5G4nezDLguPVlzg-P*9E~X$=9%t4)ugZ4#Aq)wf z)~p_TNx*|g1^`;aBRToKuTEm#z4K6(W(xNB)o(bQt02|0(yq%w`V<9k^(R1o~3ZO zhnOLmcfU)p8L0O(^m#3)H>{v2ntNu)dDgL$8SJDn|J>VENl9tM5}`xz+Dq;IKvo^I zSo^z{NpZNgSu_pHG`9@%&tpB@ICHMN&m&y^>0SSZC8&G{H`gU~pq}xUnC*l{A?71I z9{dl~)`#$x9hn|R0Y;gvpT&tR2W&KbhF|otZD#7fzFJ9xxGj(EI_*GG6$7}3%!}&8 zbt!De%2QKF-@KysAPoGVKWX)`@O(sm!IloT2G(Q15J=c@8_UW5=v!ygs|_=X+b-p| zs5tRBhTa7eN#hNE2WW3)p=lol2Wc8tDEJ}Yh2-PP2A-?;|6;CWctrR7=7n@54ux{; z`}>6Si@L@0`KMh>pZvzfQuk$*V^7kSc#7ZV!gDifv(L8Xm>dp~4_w3~w`WQz{5TwA zLhNf?$Pw}|XQ_^!F7KLAf}z>@dP!n4CqZZTABGYDRPHk2Z2q*&E@ElRX@=*@h(k#I z#6~l}eD$@F+d1R#^*a^#!WY``szoGM)YRVAWFw6=$M36I(}*<3I_a_!Z1{Shj6LSf zhGp2)-;4v5(J(L)rk;HI@zU*#jmZ4*)8J$t?@|wXBZi-kwB99U)tB+SXw)8k!hHS( z`qK@r)bJ3tE4Wc$-HKW7FApieM$&0^Z@~88f6RPwLq&%FY27evW@!7B^;l7pDpl#_ zDyMT<$Mt$kYg>v8ll{6q;r^?*ne#K+Q=ewhKbMgH$r+f{Cx^Kh}+MGO@qQ^{u;vRnBWRY z?!$=AO^o6H^kd>xh}U0sz@7z&5e#&6l3WgBwQCZEui-@AU2!`5r>i+Alsw}LsS6UVd`SKa$T$DsdJk@2He zLxHWvfu-$v#c=ft-Yo-GOEa@tQSxAgSP$9W-tX@Tn1)^C?}b>TyG!{SBQw*^?i3qr z7gW5umUU)xX{2%Vw{f*5`t0p7oYACu&yWkU9fcml(S;~w=BOW?!EaJ3bs6`bbacnD$NLA520s?hZuSWoXjQZJah00j(Ke4Ty=GV zUZfQgzzIpa-OtW(QnT!P-Q?TSVE-w)UF5ZXS&C0_>Kyy_#?f4~$c27RC3BTs%JucI zDp%dy%+1W2;O>R&QS|8Q)sYir7M>zDJmxX?nQtTI+G6Fq`EXeoS;bmW>RRQj**CFj zYYO8UMf37A>ba;p6JNDB;_;(h#xbT7!YXbB+{!7&ZR|ghtD=59mi0$4 zUI5g}0D`SkZW^4jHY0H22=JIIcVNQg>e3rp$Ib_6j zI4(BY!1E~Hjl2AWdIpDPsjr_V^>$rJHPusIS{mXip|sKzPqOhY)Ky)nvHE8FXQ9Z} zRftE8NbY(|3KeyX^pSHXFS+yg0ez&*EE$%Kst30MijBZJ>uSx>B&#op0Goa9uX-in>~Mv2UE#tR6}7Y-1bBD zPGUnwm>cWskE^-8DcaV}j5tf$6*}$aArz9^J_87efnU!}{+g-c;`(FmHW#4G`KfW@ z{+V3d$Mgp)Rz0AR--q%7GFzga7eXQAsth1pD*)`l1!lZ;hutg~51b1W5zfWo=JJTx z)Zxoqf4SI>3@f)&SXG1x;Vc>L^6bR+)C#N~;OrK`s$-fd9t)lA@<}c>cp5D?rfn!@K4m~D(eLv+(&qyndXZn&`L%)zWKy_olT}O8P%RICnjGDzt^PC&*CupsqjG zgFwX)ON|5?2Op?o0`mbrZ@5H{uQKut(CT2}E*OXn3PPG}^sE^z*5MYbcuB?(yN{$< zJWCTA^MOo4eqBFY;zqYpoulM&hZ(WkBM9x=&uRBGEY?foH>Gt`85kb?Sj=O_*DH;D z9vPJoi~Hur?CbKQXoXI%+E*KA;wtKoE-I+VYxX7>FP8}zM0WE%)LH4D4t(6Nq!&Ax zcs%&2<0rXuUg})0>y;z)ejzDyG6Ix zzKa?W#p6&XAfmm+ry_eqXxf7&{QjJqg1SloLdMf4zK!lLxxyU7qgTEE4iN=s^T3~Y ziKMv;Wizj-;fyl&r687N-=~BRimTx_6@5ppkT1$lJ6}6~oyI(Q7bZHqY|Yer(0Yy7 zh3mVKj)8@C(2EhOa*NwPWoSo?g8krCTKLcE7e5^IsuvF;0AE$Zys`kggUroTJhzHr zB6kkOU~UM%?irrQzU$81=T*$OsjXdtOg|?s&wi>QUVTHETtb%j#1L<+4#&L?8*+I; zC+SC8VF|BZu%Jyfi3t^~zuG!jE}S0y=$Dg2J6SEWe~kUH)_&k7aLeR8s3Vb`$;IXc zJ8n!etemJg3gKxxS^tUMmJEh@e>CS5yl_g=&lGqs1H|1Ec4d+5_RobQ&s-ewOIf~8 zy5B6;u4pEkO*K|;;>tC+uC3afCsXAaOohDmE-lq~mxq;hgkXw)J+F^Lf%jU4k&$|c zbq$GYJ-J&?d4g-pfVB8ZC)H5w*)bGr#P#Jg%T}{Xmwk!nm(fw1mnuu<>6a+ShUK@$ z0VX?ulF?pQWRF+>CzG>@@0qJZ&I|%}@Y! zGC>P{XSVMj7@}_8$IUmM!oa$2-&pOBvlnw>GY+fWb0=xLkrg&yljm30Z$=Hwb`c^imb{iNlajz1ww$gv|GzrPZf zbN1dq&=JFh_49asD!j)u_ZhtRo)lRv4#a4nf`uS@z|fmWuwcN5@K_+%9@}ong>slB zk9w7&J7AklI_oCWq2*ULmuPY1%bsuYjI7+kHEU+D9lWxG(@v&OD4nPu^Uf&sn-BB@ zJ@urelT*lMjRcugGw%y)bg+DW7-iI~(kCf^a+SbTxLY(r)EK-T4g1Yd*m{_#0uz&eRO&S%Y!4{OC1a4ZJIgaZX*i09xPS&y1-kq-6!xt3~| zD85+d_Fo>%6z(Fdi)I!=v0lRfNe@abDID6((6(}^*}VKP_JLyVmVE3P z>G_yjVFi`R4tm>?2a?p}m*{QIrnrgis>zSH3%cp^>rGF|$HxON8tFFWKRy4X-9Hm} zCBnUwiJe)ye<@VvXum{-soK_xJwD0b{;qM(NSXAF9I1CfXWiC7Z~0HCiPgXtL_c&`>!MMbV)E3gzVr$Q+5bv^M3LtdOF8(;8Rn zamC!}^s)P4p$a2uu})4Nej_E!X?(X0`*8Nl>qiU%#`SDN?Zo+)MvxsU90{}zCb5`n zgE8BwS3#+$=^x1=iK585S2KjZug_z}V?I5qyL5=ZaItZ>WN&!x_~cEmgKW0(k(`!N z=fvUgdI;5UzJy2&Kg*c?`~A=uZfnzv1Z3KRTEzg%9_g zZrq)ge`a>ceTHZFR?uh2FtW}*w){a7U!z%hWYeu7u}&xNqEy`Qwti}aVOKx+j9=@< z%9rptjoT%bmSTKJ=I##`k3B8bgp>SgN>tLDvm@=vlFaSm_?<~XRs>W=)M&Eq3+J0Q>sk5>Ah<{Jk=#&gYi~nMV+AVmC&4Vsgi6^m}@cGo1d;; z1~E!r)yw z>3X-l70kVI;g>h~=O-~b&!l9^aONkK?%~|NsNOVw%vvpUt0EZev2WAR&`H^kM0EXC zx9sCc6l%MnFRdu_;xNMe=ybLM(n)4rFn-vzS2szz8<`mRd?zVobE_(==&W(lgF@p) zvdK|dPVRDAS%W^=MeRPs(l+?#8r4eUNY{l^V`9wpuByWGAz^5H?)9?cs2bkL*Ce;Z z#HVEEVXIR?62$FYD!hSmj!pDzdtzap@rQOR%UAx|XsqzN1DCZ@kIyG-+9Q)$co?2% zLYrgo5QQ-OIBM5f$KjQ&o}Atwmd|u%^mC6F2H^S?YgbChzH0i>%`ENUc6y^x>16Kg z{c0#br!v{%d|b?;=h$7TszkImcAE|JF?pR7H-HxE23^W(;`aFZ5N zzgX27#&8eMo=a)J>2aC;;8IyUpyuA!^UZTT-v0vX`t0Hu+BPF)!LD1d#6`%F^~o1Y zU+cth;j;lvRP+0TGF^+X_1BJemkz%6&UHTqoP+zw5xj+cCCt{mZa(Rhd~$a^Oj=hk zFMB$qe`}|E>Nb@w!{t*U8u9U~^^o>n!-+>j&(+lWDC0$XYC$f;^i9u}c)^@U(}jo1 zSF{B|F5P{1W{=G2ZQqn4tGcy{epyJJ_I}<|vY+u?-ujj_vR5z15K_22{lh(v^#xC^ z2#W*Oqt~lPJ;y(EDi$Li5bf;)3v&L7Y#x2o{ML}V6ng&*e*D~Q5^}pY)2JE}b!p(b z!7bdI=}UM#Nj4xkH{kt!|EurWIB%I9>h8w#%jqh+Lg+<~y;wrC$Su|A@|H05y_jU0 zZQjnhY3jp{ua9^h>x+8rk``Y)nJJ{rl+QUpKPoO$)CYpA z;yt2XGHZuUj$`rH-|e{y-X-M7xBbJIt>)vXyycf*T|I~*oBOZ7yb z`=P(?7;CcHqa?VO^zu06fkJ1?={4fI(bGmBqximSe1soy%_{MoEaQ->=8%)^ZkLP4 z??3XXX!ufihBnT+Wm~Iymp1FO*=D(XVJ$tVJWfFYFoShbIW7ylT(R+^!ZWJ*?b7XD z$;Po>t)W$gqpRRplShd5U$igL(cmY*SsqOiKY51@yDJ$wBAIO14av2i`NEQixi0J>D8~U zEzVybGaNxfA}ShhZbZGKl~Xy#>2D(hs}jh|c9tT2zV-Y+uHG^zj;QMv#)1N@fr8zUs0Tx6D{1CxL)JQ^hCK*mTATD2&RLY zo>o{;Of`m3da}W!&r0Zo&GmZ92AM`M!!Sn&CHqx!nPa%e)K+dT;fv1uQk?_`ttcUB zA;z|HrLTz*q@%?PY0f0;H!Vqp>+UGeoC@uLpM$XC=Wa|oClXNES{^W z!1ylO)z`m_ddMSD6Ldk`u$1R9*dwT~{CjT} zi}%Jnyt%LZ11hny6FyZATQyqThC#B1PJ|7AORn=i32j`WdHegh(;S)Mf4;?URYDdH!RV3seB z5(-r8ydX16qUVNe+P!%6oCIwOec8*8WEm|6p!@#bq|T7zYg?)L`#Bea69Ait@*b;x z;ji1WeKvMI{?~7nNELWJD|938_tuePUDUU5p~I>xabDRN?t(#gQMz?3M6>6jC&FU>(*>qlk&(!xZy0}uCyo3x!8+{N2VnuX zS!EQyp|M%aqb4cXg8k?BA3b+}@V^#9 zj8?v@+zyrn3x@sp<@Km_QL%>|J9b_egO9xrd;8&7a9AI>QCCG_8({Y80E^(a?S?Dn zsR9vY$K~TEW4IUx7jlmxl=VDWO=a%@h5?-RB4Nj;n{R!sdznQG@w?2|vNTbX&s6py z#)J||t5?XeLtdx%?2?;$7i||O=NEeqi2J%#4XUV7POFXplIt0c8rQj&GPKMVJ_({g zn^ZfHh5V?)3Lqu;P$1O^nG37~i24jxV~E}d-lW)7e160%$R*W}ExK=}$WkYsyscvg zjeTR(ya5Bb=1Nu`1LqdLvm2cNw`#sT>T^xdt!wGxJDdJl{F{Zhz|a-QwJ7x$NDj!M1_OX0(=^x6YYOMr*V&`U0PD zQ6ZC=a?dJf6#e_xt7jG$EV(6a0yXE5mi7Z3WGC_`BzN-Mllq=M z8NBzw? zQ~=n+TP=&Zj7pk>&=4;^+y84Ig?!X`5JL@zw2TeYH=r}};akQMU`qE z?=^+1*BTfyfJvSLKeDPgi&$X?+Jh57^k!>?o+*HLDp9ns>#bqBgIv7*&QsSBY?o_b zi22BB@W3cnQ!)#_-6`PkkocFlxDo7M;9%QG8Xd0v|4kQbD8YfJa(t}V``P@p82&58 zVbnm7k#Z?X=v(0V7UAC1&2J_VM?r6qi3JbbkY-SRI3T*wa8==bEA0Qa>x$g{WDxVb zL7FR+KHauZW~*X5XOGMb#RQ^{c2gnryWSquHT`>Ob~bOsD2Q@jbXaXMkSRuK1KvzD z$O(;l{j+2&a_h`b*u=iw-HaQ6>?~vHDWP~R)l5O9?|h04+9M8qgtIfNnW3Mz<|nzl zIR%DMl}U>CQ}w)WIW^Nru+^6j+l`kL%nK*$ln%t4NCd-ViVqMn_!;-#aLv(e4Eoez z<8nZ<&vlrR8m?vJ0M=^em#w&K2p`NsP}5P_>*2*O-u;tiMQ3iQYqMDJ9FDQ|-$hHo zuJlys>qjU2I>ixS935!F&LPI-|@ z1c^j+rqi<-O_JGix^u_Cm@0q;M`9jy+@>6TZ8>XYj0XD*@+Rv@cgM4jqakT5Ls#3> zs&$Vp8CXda5M{otN3P`V9aQByK|zRVb!eU#C)&0Ko-0oua&;4}$CUZ^4uD5FV&3dB zF4E;OLZ9nFzVw50-cL6oEebj}*@y&tQqv$`PoF;fM6>#aZo&EzV(hO`Qb1)V4%=pauN&Rgq{(4HX5MBu`i!srVvT_x10|9gj5hU?0d3bdGk$7WQ= z?zhPKd?_irM&*LeLGw2m5yGu>^78eOTLyZo{jHzPxkvAKBc41~Dnxz(fN0QFbrE6~ zjId8sC6wG=xwzV8+808Cp<7$S)_3dEGtDIkLm#;nR>I@&7Ejv|2F&P{XU2(Tj@^!K zbmUsK$D>k!?=Twe|cm2c78y#E}z}Y$3B;n&PtwE zaV5}+_p{(IcIDBw^*4_LzkQCLXdiC=ZIITf112mQ*K5;|QMxx+DRQwf9$n6`oq(lF zaHwrPz6Zj8EmhBpSS>b0v9W#%-7gtt4olC;7~A7a#qa0&67;k%s_JFybCt(Ywg@Mr(C=sF zGjvOJ{mS8jgOIC?si`{N6qENT@R=jQ(Ec@mp?)ko0b2iA9$ZS|+}besMgXL7E2r}= zpnA`IWkleJj9v3}c`pyi-t#eryk$JS0W9l9rQ&?e){XTeW(e^|aGw3*~@-<|8%h(3+c&q240*mi}GaTA>$VnvJxMi?2inpoGdf_$kw4@yvBX zj)4!^VJE?|1V@uaPd-f&TLo(JwVkCwgTr=$Db=AVw^YAqea-RnZE?{F2z1l_ z&F`{9)ZXFE#c-`TEv;s`YSdK?%>I#$dM$ExwEf77?4*MN@)~jEgiX0%mL`+w_XS`T zy6v{SCpcGX-P*L8euZP!O?uJu5n8MrOnYAQw7Ay3_RYV$a^|{OLbZdjeSfPNVZD&r zzo#CGee*eTKd7GBR$9n~q!5p?oFacJzNen;wppce_wm?CqhAl_HfGYs)48Ofzd6#! za8%1Vcz_XVG@WrQ+#Va1`B|&66sXf~2k;q;X3xnK3i_w!(2m;-@$+eG(pj_X5BQ=WkbI#T3FYy6=DCqLfe9BRH73MQihB zEDDmF$M7CuN1g%RXYjgnZUq<|AI1Ew@bILs*S)Km z3W=h+2NsPX6oXFT_?GlMsXyX9VcxK@w$vS1(T_{|RC)dF#Tf5?ES;$0LQ) z?TTI-jT0g|`xI-;Xw;M68=CGiUEH7E!uZa7ZyOhob8g_T%|s9xun(HB^B*BqJe0p| zsc)H?XG!DnDAJ%h@pdjOEgoABOrStFIS&O-}uKlztWNgII)z36DmscE0(Fb#sD1%;`5lN!#mA4`p%gP$}3_26EoGy7%!%C2Xpi!Oz@B!yqC+n8lCg8(86SOm%(zHz}1m{mBtR z9DWu-=vbn%HPGAkOCs8N_FP;rD{mi4PE|L};|71s?pCyH`(Xv2$g%7(&A!QSAc_dJ z<~fQm_VZBNR61`k(LkYO9-f?0Z|IYK86mOk1SF`&mc*5kk|x_UjK(zHFBZ zWM(hkoE64^F78XI4-+u3Y1#Q}5ymV=rH2x?$t>p<~?=>+rOv)>IrMMKKY~@kNae_ARm*Y;t{)7{@PS#w~2lH{cDoTyzJ}V+>}TVFvEC zb48$>NF}^p|L3!x4-*bCwAOpWshr}lyxIgALydwtZb!X^< z(y$HKJ+3R7PPP{acBU#B%Ra=$=WHt~c0xLr!hEa>j?SyeLUH^F7PYl9UQGu(i*|8| zY$UYB@G7=%lVy-H|Ao*}>ZEAh!df1N+I6>PQaM_07uuEeUOTtQ7g%7|S)f_ZRx_n` z4~b6L?%nBJ%a%)Ia-|!T;AIK$jN}%{UB%XP_)xvQ7eJmO>&(z+JZ5QW^8PJZK|}=C z^1Z9mZsS4Z#kv)_?fPbih$Mc4QHVdaF)9(l|18<4j$_deUt~7u|L59&p7;_YCKz+= zUVxL?)7BF}QhCvDg$PvTzai|G_ynx?iC5!7#gK%^yia9TfE4qS zaFa_}Pa7W;FqCvnY=aCKccy9q-rM5Dp^wxP-H!n%q&l~~S34#YrO^ngS=`h}W+Bw- z5r2J%1iOR#pm>C!d1>O;6j2c}p_{$g*vM9Z@;n9_|15R!Coh2Ncw~!)a-7@V zk(s(fFB8WrIBXx;<%bp5Ka&Kyexa~)!CO9NZTJT4&Sl6kmt}M_L>k zf0zkypAN0LCCL1TJX3<0E~Suj)t{N}rUYUBCvDo&2pXH0Ox4587!%)HSsDm=P++)Q zrW1$EeZC=beE7N4&gdfr#y89lG~0osjhjv1p9kOVFc@pf>*h?_Tw*Q`2l&dLdyMos z>99H-+wWYqZhf%{i#>_WZwb!}W$BK-vu3f+28pt(*Dd$=FCL7Z$tLnh%}4X3^)J=yjVH@RKNfT^ zO4$3luG6qq5*81-j)C_~N^3%lpgI0f3;^`!h++3{0KvY$w=1FME!fNQokyx!LDh$E8(c=^5= z`k1)1sk69r4TDRpHu`BvT6tXTHD5jH^g`vy=k(xYi}>#6o{rv=eNAJOrB_Wg;-nPNmpjP}woO;m`~Rux}$PY^@EkW*nZczek> z)H=)2na`(^Kw1^IPj8Ev_QmegqwpYxJ-8xcwqoY>1DOcAh9Bd=7~*j0EXC+vh@s$_Aq%dPMFF0)XmR`NqWqk3uI zM8xC;6gL32!zSX~#+<@eZtsb$pZB5_Sug~5mn(jIcTnbs;lbz^t#0|{ptNTia(?Mw zPGoRU(vHr24$N##UTP}~C8P+}7Z`Fz_;Rp-Pr?)8h0&DdyG4U?c%$t#PAmgZ)U1FR zMGDCc$xHTNh&G;bbI#P1Y$C>mPO{?|KfzVoFpA46)5yq8)1M>)AsQ16Xo9agM(=UHN-5}#8uQ$m&M_LufnKSDDT2arIO zDt0QG!OndoX=le88MNLHGQSpv|Kj}<(eoJ|8pK1eO_oSHzqs+|NZV?oz?Zlr>y|P1 zpq%jz5q?S5Mlmu+)yL}{iDso(GB$8l1=z1 zIkAhB=hfS4zHXDAaL*f#GZUUvjE;8TsPQx`o>l>kU!@CQkPqv5C+v&D^=2x+ z+eVL8ZST9rikhAYitiQ#98EL}XFAEj1R5*C*6{po|+ZWa==vuW+pK$5)BfrI< z)}*upG~Cl<&AW${?yb(x+l0^C;ATM|uNtp4=Tj3!ZwmY0hvt6{$OTk{N59|%c6`Y$ z98M%m`2TMS_$%wr0eG8RE$1*;s5FZ0pS=v;d2>rCZbYDvT_d7EQpOBe4(VcMExWKX zRbe<#r^VgMU3~}qrJx`$q09Pp{YokNJ7q$h_^JawL&CgXksh1tI%Q{SokW@UP*VNtb5U?VAT(%fP(sJ}GSRlUd#j&k zR)`EjG}(#*MaL*&1bv>arT~v>QNR@9`DilF>^5`aJPRjV*F>?M>T!nqSLIc#KTl4dTl-otz34esVu%z34x zK3ruGo=E(nXpj;~QzT#E7TlyBdf2>h=DXlK@D#3#N(Q?ytT@leXV!sLAX+bS(DuO& za$0v~vB4oaR-v|AphE6WYoQb#Q*qUPKlP}s=6Gi$!LyHdL|&aQPFXoj*{_3nS=X;a zm!--sG+|dW@|0{`GCYjJ&Qfkol)^OevzvtWxoS@ZTJOY6<*J^!Rwzeg$opVhoTmu! z2p5(QNl`d*$@$0x5mL8~j~iIG6(5I`eMxf>#JZqD4|)TmVmv#f*+I!y>Hu^O5^E- zOJuh7e(<;mU&-i6E-@}&2@mdt+Y71fWb4yRQL>?q96AIIfwsFk!&7?jqljSXDY%Qvp5CN;BXERODrmMj4tPsOmmlQu}(D`j9=s zfw24T!yeu0`0HTj(wb&~xr$Hq9sErBOe!zuk++CQkstqE=Up53tXhbZL0=$$}j&gA}&6=37M+%hh@KR4fx7Klag=FDDONWj-93D7>OJ0 z1h@EyxT3ePRp55=M1W}Q?LHD35Z=TSJ!w*rqtv%&!dIqOlTCqwv6Hk0npLOH<4_n) zQr;)&5JkqL0h9kO0wtyN&QjbFs*l`ti1bWQw4JGDI5+o(hK(bCm`En+qOg9NVVMA| z!od;c`>tp&rl>h74f$o8_}U6ek-Ykep(XsgS{G^UBf_W#O=7;&bRT?_|M~e>vWU^S z@aw`Jq?zQDEAKS%d)V3R6&Tg!g2M#`r; z{I8OMo>n^JsjA|e+Om_$MXydlb#B{G?C=KM zqj^tU@Xa38C?0iL*#7ZkZ$qc-3Zc{?DJ-z|^L)hS!vO}Tk^h6m4g9o~wa;@|{>SIq ze^wxub<03)^6CES?kaA3a=c3}(2b~K{IZT+hPc9zrr&x2>;K^9rzEnq(3Ta zFK&nr#zv9%!fzVbws`0urN*QC5gs8mdnP}`6ZuHIMYp#<5EwN0>B?$i?FsuAoD&)C z6NdBYwxFEL%|g6ZK5}qD=k(-&lds{5BKt&uKG&C1i`Ll6q~O7q8-wiyi|F0gSl7mK&F)z zZ|pXn(+Hyk*Xge>9;aIpOI2<~$0z|%OlXjs%hswinWYa& z<`<{+aE3*j}eF$(C6^~K^mp(ZQwLx)iVRi z;Z9GZyOUwT3TB79HbByBo$@R`?0f1{nO_;VVS8({(` z7y2Zp-z0`F`)j&?GUV(p;X*^5EOP(?zda0NC^;B>F9e4z>w>U0w^+yqW^orJsk83T zuXeX#d!a^~1af#)E7!V9q!gxkXisf1cHfVbIn%|@nkzIZglKafT`H<3#z;CopI1;CY235WYP z}7_+3BbzhapaL>Hb?gq2o#eaq0%YChe&(cJo-!`}%M~;fc77z@6o;i&Z zR&eNxf)R1%`Cj2Sy;vKZZZN21hzBQkKN;QMN*YkVUaK59Q1%NN?(vgAL@B@&IP&u`*%(kTHp!j+tow9!uisq8GX`uHeJXO0CiJhV+;C2Eco$DXPfBCtfzt zwQMS5+X^4%2J+v0zG-1={Y=-xmvr}E_m;9%4ok#kjkHBC>cb`K{1!i+mV!Ok)p5j^ z>}O>R+QM2SzE46N?XtPQWlx-Uez29ej)Z323Gz0*1svOZRtZKp3FztOUkF2f7`bv1 zzR)da>b$)|nyk~OW$8NjTbLS8ezpt^(W-blI$7J!(=VS-&QRd$wiL zN1e@{c+t;w(&Q~~8=PDD7QpXh4k0nY^@|>O>u@JKS=;QB`Q{AAK$FEgTDTzE^@Crb z*KxXFYW9idFz$dDojMb0xD#VC4IgM?VJ#km>q#&0D_<~=7Vi(A%UOyMC)@4GyHzw| zEUcgZ0oY_eq{FqEE7>kw0bcc1J2Nx1|38f?9pnH^oFIDDOjZ`1 zim!MM_V)JYjC}E@Zy&n*mxu`BUm}EhlmL{!*BX%Dm*B7mU(AqEU7;mu9HFGJeOfV|K|M;1JX(TIFw-XRTn8rcC!2vGP zeg{*ZMcj=w1U!C*vqRg~)c^I*;MwC$!2gD|Z*!vP3sbauR`b{B!6NS~0!DIn>tE}7 zTb-KKIE-Hkwl7vNvjqd5KAHt~h!HDPQ?Y5*`>K{#K+x zi^VI7c;ut09Ty$vRm2VtLxF|P!HhE=@Un|0?f?c0J0+ep2FFZd%{NX!n#bvucWJj39*E_1QB53bM6cim(waSg_Tod-_`NB(+e-DKgZ zqmlJcpj{d|ojAO7sZXtYpWbD^>eNP?cz+@ghVrK4uq?a=x1O~ZrhKZ5B&TxkN|4eK$s@vCVhFcOkC^Hc%+PB4qk*ymR_t zo(*P^$Qpzc>y#IiTYai^NMmhBH0;dlPZ$!}OCHRS#f!mSOJhMU68Yg^C%vDjOY4qIODXjGO#C!hns`216g|6>@PQ6zl zGE)X|ZaRk2GksnkSd3C9o~lOrw0DmUlb{SBoPM+&Mi*%iVL`a~I#|4@uR{8y%o&qmdVhB2J;~00IP)CB-zuRGMM$4OF(TILyp(znm}6pP}9qVi=< zP*yBU(}Iur<%efFX0ZPItKMPGnONq4%Ywq7Gn+4EdVbIXBgbe+jAPHM+RCS2{n6r0 zVLl6sey``3LV`v)%GrOcgs{Kn9p%hy`1wrrz3?nj$}o09WvO^$44zNGSm0=cxO{aI zUQBDPVAJCX1DbkIyoV)1LHcDv0xv^_JFvRc$&bXRQ??AA?CdEsNl}E8xEp0s7Y($b z`v92aGUe#V=-g)tXSoM?bv~7RC(V+1YP=Y#pCso>qo@r+5>*NYdy9~_{f_0X?!D3n zf<5(4vDybu;@}%fhm{{|H6pdJ4YY0H-iH;++R+CFK9&36^ch}9 zB^`&=PvfK<38{@r|2R8ch0jdWKTxCmbt^X##*r1!f5HXV?#c^BK&}aQb$Wfxo=<_{ zX<6(U}k3E;6Ko7 z<-S|ar{(3qTDhbTw?l@YZsOQlpngcd0?-7L#_~W}Lr1dd{KKP|f-^dSVZtVSMaT18 z-rb?Hhg08+t7MRn#A5rPwAvs<+cs*IvzUp=`R;nynKTA%t=bYGT(djUnAT{f+2bS- z^N!4m?WvVggluj!msCeMO9^sC#}Wso&9O||;&*S;PpWaj6L} z{(eCdY2entvBagMpo|+(rRX%WtE0#uv-rYFG7z^NyDxa8;nr0Nhl|jP6eKsg`_Jx1 zaGzBsSvHsAD%%W8JpCMspGEclS#w%L!&(2)fWqb4p`?@%@@>J}IA!oqIr%me=DAyc z2NcG=6OuI^r{~E78*o$%($hTBcHAo~G zkS~j!-1&Txh44t(j>Yh|uE88BcO08RNl!E1*~@>kX}h+6^qL~Jo-)A6=&kq6Ss@pg zyx-Ndy`sEM)qSvbu`pb_HE7?BLgSOemaQ@!X+jC~rw}p?6UHz-m0sM^S$~mwy^Qnj zr7(GUM9EU*8fvx0=taH_UU!dcSo*fSpAo$OVC0+*{ih-~Vtdr)_iJYb)%o^WU=2<@ zr7hPNAQJrR^B2!!IXXqpv(}BJSI;2#Hd%+(E%rf%6Qn`dbs?F`KNj}ad^K~xJj<|X)!6(LE3(ZL0wbQdiXrcpM;%%o>VBE?7Tou=J)4CY zz3#jGbwKe39Vomat9`d{a7>I|XcM6aJ+(V%$cEFj+sekzSZ45^sOCjMNM}`PTY<07 z()EBk3_o>e)=MI5B|UV#Y%>W9ju0Hhq7PG)7O$S4u=x0tNO(S3S$-f~b=jw!-TtuH z2^EZ^qT`$l3&M}|_oOoqw8U&i&;iwxe%#AL-aG9`kTR?{T|b ziF7PlK*t<#&H)0VSxXPLGN+o1mBCQ=3MFRCIH1Jg51@ePgfdB9i8-us3r|Cu47}+A z$(ZNo;m{z8D~~hqjKE66ns))x8Rxw1BEnf)@=idiCQCkfn?LQRZzY>NbN9idXBNt7 zjBl*VAA_g&Lmh~r<}ZK9y=ss|lmW1T(94-K0M2D*UxtG8Pmk5UJyHC^CGDa12}iPj zEUS@T0WD-9awph%cKCu|FEY>z=YgrJZ_q+U3mdF#g7*j<`ofC@{e+-(ajrvnQNvC8 zUk+6V5kY3No#f~6rPcqm9^4S%@etm;)#Z(}%2-y(~?GK|;EY3QcgsW_ zdvyR25x808p>t*S{le#6zlGfQy@2#69mVT{c6CL^UXGup?)u@}+qizQti2oT+XudIKIpBWp<;jwMRjlPWTnbx3i$s%3|(z7T#g zO;;sFnwh5+N&KCNIqfuDph1>nc%iHJ=SyccsvExAv{mq+h@JO+)L?A_fO%h6o0WNx z^XvF#Mm^k*)Es#78mKNG+6*AvPo%5lr4P>G6wO}yggfc-_C z6U5hd0cLKJzaS_pa5Hqj{W$W8+5RH1EJ73s9TRVuZ2M5>wBjjvZP#*qiH9lHZ+8!( z17T52kS(^xNIb*Wn@(6+8j9hd1st9uDc>)?UdA3#W3epzM?P}jbq!m4FU!+pRCW5a zhLaeuwp92=`y5%rr-wILQ)9eDvgFOE)6o}FFw7TqEmNE(>Tw3h_as?tB^@Z{3tnAtVs>ehzSBc8KvEHbX(g`DlsbVX z8PzZ}2Y-Vn!V3GB!&V06J`%8%1}FP<42jC>QyoC%aYB>KVd{$APDY&CR+nga6p(vS zQyC*#f{xGML+3Fz^o$9e(Nsmh5dH4+jN~VnqEi&-JaVQSzCk|LHpFx)%9{2i&_ICE znW$(n2!A;>_mh_}M?zT?0d?%>e%-MA*#+!$3?q7r)Zq-%6N?$b*^ zKcihGB{eMO4|j6WAphKWDp~;ieiI}uRoi66x6v%I{S<_?~ zzkhZ&Y!d|*U6q#Fd{t2cl3OIxK*%S5cxNgVZEFQV;XH_|Rix{$QZZr|;-cGYVKcw% z2pDvnc#O3Mkn7Bk8jllCyl>@WC&iJUappucRE-8>v-1rK?T+lI zr-eB`v_x;?=#Oab;l>%U8}9!0a7vBjG#vgZ?_69DEozE&tas4 zcvh8ei`~LHCzsA8-ttG7l+&BR@c%AvB=FYg{ zm@WqslN2UV3;Xu!zG5Vtnen{!#jnAsi1T%&dxMSVHz?6%CT5N5$5-0I>7x?-cXnTr zI9eD5aANydjk;cGrA--Z)>93w{w`ggMk%&EF6Hii*YcA1De^uXvi+X zVv$nGQ#I4T)9pU>YTxp;AF8Wjld~tDw6Zj`o0l%Iq{d_AYJJYdXO6eXP%72EEw1r2 z=U+CvWjY2u`+h!~p{QN|U~BkK#wk}hzMlW@qZE;MJC2>}Y-i8>DSKMNs>jU|hNJ}h+>0uoE)tHj_v3GhO zCCT){2?B4)l*vT8-Sbe@Yp`=Jrc4SfvV|L1(}yIUbq-cT`<9%ye4?Zr7=S*z9N6R! zr2EygXakCG?BBd?P&E1hsEKzIB-*i2*Gf`;=2Y|&x@uB;^`)Kn98*Og=)$;(YmqzM z(dE61ZNs?sx7~(l6K*|6zu{;)qK)7sRBlQl8!uKKp2Ii-e!EZ|_v4bqJIC513ZR(V zaTbGGP-O|q0Vo}eiv5ngab!a5PyAc0UB`3Yca|W1aF;bm7DQ@aqWIkmQ)bZx1AUX} zqlH~qv6J=QW{kf)!eV#Io3AAHlIzN8oCM*If^WfR zxLKsu#jt_{;hy@t;8D&~^Q^9-?SJ~254p-|=oCea%_PxTMM-^{jj6WyL!-+#X~U=YjB9l{vQ$Q!0fKG=4&^eWEv!3M6;B=|ilnBto)EjW{?wzP!_Kjo>aeMGog3Y^tS6q-~ zbzP4^s1jUR6Wl>k45Ll!{6C&eNTOR36o0hj5vk@#@L=Y#d?iQqy6~&=uQoMUQ%W-u zEfo|;;<*XV+s787(*P(H)y!p;CsnSsk{JJ?vsdW0if4L07ytu%B)E@a zE9iYC^ma_0D0ok|=?+*%WP9pN_f6lmJxkzWXHkdr#TyP1rO=8SVr<8H8xo8DYlH%3 z?#~D}G@O}-fpx?ngl=1*HrHZ9&JEFNbjZ}BWV-!x0c~dX^H}Si!0#ewgyw{nTKJ$r zKx?0~L&aC+04{VeEFhVsz11V$g6OIEH8A}Wnyxz6a4eL_koD#U>fn3bTnOH`hLvc- z1Y(uy18XS}Im=+^`rD~aGM{ykh6cWZt-Z8aR<^_X~*QoezMXZ{C^HdILuBQ52T!lbxpJh z++nPm(Ku;hypUlzgtmD;9ut$hkdKWocrPQbAEK8$cj|)@nC{4dutkRUH`^wKh!)_BY3cRZEkfts@*O?w1*YUnp zeYg_tM>!mz;uy?g)??{I3>4CK95e9@{>OK4nMD#sDy9DmcIDug{X%yX_5!!E_LRjj zd--Fl?sukvkTua=7H;6vCd;sYj#*CN!9rHAZWxj{6!FAJ4*8-~nI)>+$rs!$DM)Xb zHQ4b7(gEl$ME1W#>2(u4?Qi199*kKx_Q5o7OZPcRsb46q4(ey>`^>`Tt|ukx+7x<|e}+ie8QH;fD8LFiHfeXe&+qq9f_ zy&nf?*MsVz#-LJpgLd^$A4{W^hL5~{;`1hEn0BNaI#rdsDNb?rU6@g$k`mf)#spFR z45lA$C9g$THnkd1DbAM&gIAbmdYsC)yWf6f{#6guKl@sU<;v}tbW+^cG5 zhyIul=Q~-Xt8BkZjaO(+4Q>c0Wz?=*3j>Z`_oZ7g4D!>O!aqF!j**vBF(F4VIJZV^pgoJK#;ahj&h5rl%4{|{wf8P!(1Zd)i6cQ0P7E$;565WG;JxECny z5Zp_V;O<(WIK|!FDIVMHlH~O2taj1jA+#SM(p5J zVZ-Hp?NMvzDQr0taJ@z44UC8B**9VeX*siAJaQxzH`s?{&!|_=QIGTJS*ceSbt-DGd}V3l5HiRRR=k2HvhD^Qqco31t;&`FXW ziKeBIH-kg$6xVh@Wc|obcOe+evbagx#h=bBJqv>~f<4TTzKcKtI=e#pNF-m=<8*8H zb_V(?TQB0|1>qZcU%msCtUIn~8ozZQkIJwPF4NsW-#Xz}o)Cjroo)qYkW2Yn z-B02ZIldI#rGbGmzm;n6{W8d%bFHRR@XmZmbd>pvmW!2R!~=hN5Mwk``;S6tpZ5zB zWmBvlW5<~2f$>z#0h!_@PU#?j8;x#PK1K9{XoJt#jC-1mXn$phyp zXBY=-JMWG|E-%pJ46<3iyq?tkO2|o@=VjkPMm3=h9nw7Ezer2cG~`;>j_Td-v+PN8 zeCkOk;pLB{*v91-d8ZV5qSN7tvIHoZl&(4oPkWgE>HCswwxM{2YKrmc;wpPBmJ(q( z&kC8!IQ_8?25X7Ag2C%EGHp|@-gq7sx=ZSa<9dXWP(rsFvSEh}Pei>i5|t!VMMNid zTdx>wY^pr9zv1by8Tl^J`v9|*dqP9Ncm*!`Q_1b5og^2X(> zY{+$`mE{Qv8&K>gj`B#bZ#P{VGd&^Lb=l05%Ai#tPCg-}!AaCcod#NTR`rKac9v>X z7;`S?t5$JmwB(eqDfb{a$n#826eU*Jb`T&AIP&OM;t!@Dem?9l@ZkR5aVU;~v%W8r zf`p|7L%BYBhqLNx%^@OMwCZ_eX7hYUVbtIFHPM)@-P9nkGiZr2g6FrF+hV z*KVSFUG_8Lb=TM{@KyMfD0fjXE-#tS+vi+?@mJ4YzS$UD16H2o1>ts?La3Jq!ww5S z`pW)%gGuAVV|n|+Gohn882!QzKCYjyK~FoeGu#0)x}68dsm>SpA}LeP%@49rdw<_# zPZcHBc_#h|+HCZ4a;|OV-_JRsz9cs(NU`D_$X=KmccA(@>1Dne>RwLt$ArTKHQTB; zwvyw*!TEJfB?EKfO4LKKa>Ay=jWK2|rlzVhyGjWZ^~4`8ev`|Av9D;q$ICWSvk7c2 zfMR0CL8+w?kWx0^P^Hf+FchvrTUctK#JNHlfR4;#k<{V z%LT6B61&BkLgL*`*NJj-5ORLV$8ZOGuOKB%<)wO+Es3LCowC8}uSu*eQ#k$}SBR}ULY)GhCqJ;bM4AF_aDsNx4<@Fo zdHbbk}3y550%zw#RLO<5Om5f!lW~9V!iMHRgM#-)$$Nn5HK1f;cB0 z>m&vm*}IFHA10>jCL9MMd%I{@J!4W&2b9_It#ZPb#H~Hq zf?fuq30%mKJ0@gkr#|=ln`8=%*x3=m!*ButRwN_|snL4*mMKao#reSeBWrEpA7bT?-rbseb9`i<%>!566TIX3 zURBu&)2@PYf(UP_-Idcn8|#fny_g7`9OXKAe(#-oYqX^4{w(e|%hBZ7{Whw&`I&5~ z14PkJal-OFjooyHWJ)7478JcNeM3DgtEN*smuMy@QkP9xO&05#5FvI!X|z|Qf^ntd z_xQ5J5JY7^5(0%>R{GFfEeVrcW;GeI&Q<$MC&?NZ7ub<<(wnvSPWJjD?q+&tk!xmk zJ%yX17WF8_|9WFLSb*|q$#wdWTjOO|QC}HCI>GumuXYBe)acu&nEA!Wm8Z^+ed8UP z?8clgG8iRxU9Zx&RIk+m;2Lt$LHA&Nqi(RVlIC;LU*1wcinL&1NUNO{=#)1~_v$8o zZog%*MpzAvoxIlAp7P3Ec0OMJo^f_3dbma+fVFPC@b(|4P5pibmPwCTO?mh z7FZQMqS}g*%nUYd#Y;r)L zDVdPVe&SeUp&jZ638Qz!G

`Sgma?%9C{TBVq$4&TgQYIM0EP6N}r!F{7 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

r%Tn} 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

%_y{_ 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%0Dm@Ms1n)Fn|kgD7n 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

  • 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

    rpmWlE11|OdN6@ztBA6^l);wo{H{lX? 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

    (zb~ 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 z z5go^A4FzbSd@(dlp?hC-XF3U}MbNM>w%p_Z6^CjxYb$*p=(%_$-WDZ~EP@7D<3IYxnIdLs`u+3iL;s;B*= zdVT@J%U#lwkOuKp%<1u_8uM_nw7b36-jI&7C5(#C9GPHf=~YagOX@NdjDdnh?kvjM z*3iCxW&wy4PQGoRvKlKfcZC<{Dn#&COg>EVT#By@!fv;K9SE1A3h={I%Hq*eT{E0a zx`!a;2FMoJYPKLn`Iy4)Hu%#a7G&OM5uYePj2KKPj{(_a!}Eqeib43d#{$FE^T*D= zy}6n9s$3-Bb0@ycbYF0wU1y`w@^5oZzC35A_3fUOFPW)7nEDR>O*V4synS@@eCHunncE<7pkz^>3fAw7eH{znSqH% zt9_(83g{OOW;b22DW8KW6{t-OL{}6zqn`^A_o+gKJ7!K#4y0uSb;8ZqrMmlkh#l~5 zXve0Jr#U;DES?*1A#J%E$*kTq{+@Xz)%U$*K=T)8ZSdS_D=wm>?Wv^8#FdlwCIdGo z#dd?y$cG9l%pvK9z)nIx{he3J&N8x>2Q{l#{}`5`no2n+*lQ_m=Ckj!xS95{VbP*) zO*CrEN4yL13z_-}0Xa!w9?8^zSo*!prhuyWO&Vp92QAUE@gwHU*4@z?9bB)JcY=91 zy~GL)8t=C2EPaiaKkb`khc7J}qu%Gp;$$@`;I_Cnm235Aio~_iFT56ZNZUY#wMFyq z$@m8ro8wo#_B#R{^jir5?9?!MhMR%($tbH{1SoT=8=|CJ(SHx+~}7|Pbj z+#gHSu|_=-31%kG0m1w~0xx~_9++61vITY|-Sc89+kMo_9KPHic|8!5mRl)#hfSH> zj0Rgh`Fui4YP$I`+FynVE&HG1G0z;JUQfFh$p7}=`*Y^p(MARQaFG)d31m76u}=Y$ zQ_}mn7sra6Nt%1a6d=khbcxxB(9{PvHbM>Rf_M>n;?rV+C$1O&R!u6{ped!q3S-= zxa}dUhoU93X$%TPnr@2IL|Ca>OIP5;G7&o$DFn~`=wQIL?PZp$H$bGD`!Q!JEEz_Ft%}0gjoK0!g2y7vPUz6t<%47L8*XK3CHT!kdNfBAX>T-7aisc-) zz*inTFO*CiFc748)+Ndl<{BSfjq}iR5`txV5%71+SxBvV&8=|;IeskakX@N)l05WK zE=1%*3Mr>HHRlA4cA4?C1Pu`$R=DZ522x>-FnkCH$SryKncad%PGUShslM2)29R2s zLTEd4GEkEgDyBI}`(qXMi&of& zC-&HosRs}73#!oL-LeL1>F>a-B%u=jFnvHXRO~$&@UQgBgH*^P^skkSM5(Tz;=XD_ zj@7!U9;8(g7C7>9sY;d4zbd)IdVH_NqPGiJr*P{okVG& z<3PRC5hu9Wm}{fq0C=MXwY{o=G z4tpoc{!M{u3HN%r8v623OJq|dq$p$g>~DDG7huO&-OU;gF2{4D#t`qRrIDSY&1E?w zXi^|P0$$ns=k!teug@2egY0o$w3_gvAucHXvqsIe9B|I6(U*~pa0yoIfNnFL&dr)f zTI#~t3;w2Q@q2L}$7qO_^ubvu4gtW+rJ`JBbZb`bEDK!^{m!$2oc;6G#{WIs&BN1BHM zc*M!C$hzwQ=7yp!E)~B1@K_2k;_Y-j zZ(;Sz8mq5AeEmOOhqw&UC1||qM(c?>E_5ADAJjJbT3in0?ug}A>Vcjjs#4BYU=R-q zOytRQ_s={yGW}5mp|q`-a$CtO?QW-X9WnB@W0lUGuwY{ofcbn$9jAO?E2i0(G!M7o=3@-lN@N4U6^XEQ2v#Z#`bW7XYnbO_%~(~`bRAavL9py`=zPFDyM@dWkzWgwtx3f z@trjZm)(B`Oo|R(lE_HeTRH(lQMHqG^+>C&QON=WZz(BPi=Je|&6_#Drmc-rBR_%+ ztp(KO7&UJ3>uVlI)KTOCoPakAl;~{M0X^9cU$x^iKOc+`soid7A}(i?!^lMqXLk<9 z?D&KcibQykwp-{_{0tS{8Ra-s(O(F$?*dr8xBv>Td|=QJyWT!+g@52CUJJC_5E(m# z4cOd(nvICre)tS52Bd^-$soMF(Z!c9QvSj0N283OJVuOB^U#dq3&JV+Idy`JS-gJo zp`1QsA;9C`JTd=S;}vs0Cu?OqW*%pFefj>(C*f#^>Ju-H*0CGA=#IsXuF52T!C7oI zmxUNT;Ag;GKmdS{u2MxBZdQ6>S=g-0EPV!KBcB}H6E4io=x5tJbhUXVO)L- zvOel}ite&DmIP48K(hCSUj9zv3@KxZKDQxI&=0!XD_`2PYI*M0>d{Q0_f@5~tsx!w zUzL6;BlV3qxfp6a69OQNVw&OktEZWg(yWKH9uf|4v5dEmLUvAM&>a>k*DMG_-+hxQ zz+qpss8h9E`srZE4=3+pwvE%05k*mPLSU`nNQpJC8%p3adwOOKDYPa9)g>#k3_+=v z#P;q!usB^6?3JGFF#vgvNh25U(2IRwCb0MOQrE04-nnHG1`_)qdi1DFC!cqGUhO8Y z=6c4cVnMO8z}ph;I57d)%VX$Aks$B~$$CZn&TcBr<2^acoGoq6zkYOwA8CFc~@rn$P-|l(M@@J zr3_+$#m2_|!o1V8BrDGJhr25S1Cy1`=|+O=;5*G> zEQ!!3Tfe_0Zv}sT1+#YG;PwIFILoybEQk}}{CQRWbantP*Qb^Y**6nZJt7nwj3c4m z*d!W8>vqzj)a<+SIXaEoa)Gb3E?r}YaCpsj%eP5MuqJxBoQe<73%bF#2$cnfOfyL{ zKYG^I{sMP^gJ=tsn&dXl?Y^ArjVb*+Wp!b0Q?)kq-9!P0O2VMtxB!##FO3SL)Q#qY zCP1N3^9G(EpHC9tMQLrxefoGyN{z?8P!qw!JY5<3bX@?a=;xkX*7S|@VVrK24FAdT zWh*8Xs74)MssT!9}<<4z4ym!{u+v7N&$`V}1hD6{C2;E2c7JF>hxOA=t^1UxMfpb# zwD>WJzBb~ASC4neYMAuKGZ2(i)JY_*HcIHo*y4I~!rF3Xw{U6U1yQA?mty@u5Q$Rk zwK4Kwy9cFM1 zNGfPIuS0^EbNLdqt1Z;fwU2$AHMw}DeJ?=r zaf+L4*_~LA_p;*9*a-r0t9NXjXD#Kx_|$NU@`YGYmg@R54NA<5%8v!{RD6@Q^>*T| zXh~-$_D|Lt6ifkM;{@T!$zH43wmeL_mLCC(YcW}N*OC=5#0^XPUKRLx2R`K4B|5T* zqH!zt-4J;n!XR`v33UQ+Bb%$ag&QKSI-XS}?g=s>Q=yx|RD2Vpjt~HJg1vD@K*Pt*+2hkU!GCc_f5-SSinzS1 za9+tm1c>eG+Fbyj{`3l_TowQlNOmWU`_!2&gd8fdv81Q-1hnh^m{r`*v5RxcjymwV zM3w~*BmC#yB2a(Z;1c1rK%ciJz32kaQ;EKkRH$^5bjURFs2a^AK307lUKX}SE8awM zMtC}&ev9X1`UK5TO-h)N&j|yRzP=@ml*8!B{_+u{M2CuO9;q+n1DQ@fkk67X-P*gC z#qBR@ajK^i7Nq5Mv6mgqFyIG1>>pNVu5@v}x_l(cc`H%D=`&pAu29#JoZ#=U2iBm) z*D9<_f#eyc#wrZZmKTDJT(`6~&q8DBy2|lrJxc zC=zBV9~4xIR&PAbS+0&VTi?WL9z9#s0-3g$7EyL z>-F(r5pTE6$vS*wIN~0l_?g65vyePn*#e%NZ;Q2R``olr{8K8AJvH03J(}B5qoale zPyiejFU2l|Lm@L~@Ga1jVngv2skXS=>jgtW=Z&qi$fPuRo&8)_6|rc7hWP zqpo#fs`t#%bR5}>xb9Nw)bM<)?&ZYpXO`mt@@SI>JBJuJJEDSw7Q`)XzPWrlJ7E&Q zQf6R5+Hl8Ig%xQ3o^gkt;Nx~?e1N~@z`ARFxSWc^aES9uu7CqDaG^7kQC5XrGX)+= zPvN%4w{MFV-HA!mtbkI35ZiJ=bKgO)`mVbnwi1?RZ*NA`0>XYzE&8X8HtD#-% zpYCd>?=k@!7{?as40!(2DEaStX+s=g&_>SzOhwYf@#9H@k}k1{MHlCWgG}gg_Dgqf zTetHa6cEC1m&fSHr#~H+a&ik+hm$2HT-4DWj5N!oG~M5vIy&29cn8jI-`_bZ_Yso* z0Wk1FvZtgSWsNr4kAPR<*>D^be&h5AbIP<_WMT2j{nSz{cl^-a*h=lY>iMh71Wy-+ z2uX__S{LgwWJIJ@l8Bl20zsyLgps#G|Mi)SZvi1W^auoj_$ zAc*TlGo8C&1+n~Z<&Nco{L)OHLv?F@8l7Xh3nnhK7`!OD8fz3NyP__`E@gU~cI=Fb z(MmBlG;Lo~x+R6VF-Pwr3o<03r7Xv+poR-RR`fneV*k6kcQaVs2#;gIQ5%Ev3d5On zKhBBS40q~^!B0rb6Nw2f*!G)L;*l?Y7K#@Y!K8RvTFPxiQttp%_iKB`F$c^sK7r#p zQr(H)0MuGBK{17TLxQoZr+xE`wR><=EANO2>~(I_;Nk*=NNAz8OOl zFWH@J>_dZ71VG={1+bW55R>k&yMwYvVwr%|3vuJq#%E-o<70N)4b?sd@Py^#z5q^= z{=_d$9xtCfAdsW8xZEdUHO^;D4d(<|;;z}79qDhUXRI z|7z?~qO?yFAp3K6-)BSLJnjoeMlT~wi1Zjjlgx5B{CHJorHLNiX;b^*U>z^+ zQC$nb3w&Hwsl>sgvvcVcXL~)*)$GhKZ{~hPhbz!st&c093t(mlWo}{hwoRUKTuxe9 zxy!*@wGAsxd`S34Fbk99*nGG2S)toBW`af9&9*l3(iB-{D5zXYkSY1N5O0yJckHxJ zHpm=4Jz^0p+IqTffp%1YfI7w=)N1}DJ$#K9%^=gEQZ$0P+6(7HeWNz2KEsV%7$+V9m?5X2C~e{bR3HufnoTaxZl004fAooOWZK`Y>p*8+ShsACmmt=*$uAjRD5)t zsv%6qA2X{qYpV{gW;cAOc|9xNJQn~qvNKh`ouI?&G3!h1U=#^HT9zd=wR^j8V5#^F z&cc)}`a6LW3!l4n>oq{-$22rPbwp-^01JqC&s#dGseE9HKI3T(@Cv^#8@&B}k?dzC zf`zPiZH6<*M0z*$lr&lG4(JB%2|sd~UjF(grpOg9+Vai3yV*%_iDA;mx1@e)Noc+) zW2xNMKipamEB=&@pUXCVZB&W6-*Z>ap!U6uNRh$nrCW0Nf13LKuY&r|1rgvgiQK-^ zz*;$NMWKNwHfFus5IG-}k~huzjp?z3Gja2D8$2|jknu!b!3L3C`C%u6%()nK1DN@k z&;pIk_8JyPsoQEz94i6`RRW&7#Mm7>4G0@kLIf9G;sA8d zHsc@}da8%w7+o#-zZf)eky)h_o2W<2k^PtSKum`HN6b{{HzY2hwfUFRmf z^^|A;7LOIEzX;vMTSSMi<+VK>peQCh_zVIc2c#JgtP84B+ocdI!VyX3B+<`Nq>yoW zy*S-Ho~+t^x{TGM7$F>133W~~3+6-8<)uKD6U!}3ixxTpE%V*gfql=Ln+Z_G(ZH-C zvBx1|sq`k%DPmgo3QXF0k4hYgbm3pqVvU}AYNd!eH_gHLn}AdHHOjEkyrr308bq{Y z=HB@xi1O&9o%f(0UXy#z%2Fx%`8;??i<)Q&(hsoNAE~lZTQoW8`00C}QTH%CUf6s2 z(k-#xn19Z7eP}1OUnG1-mD6TyO(Zav*;?kz#$8W}V0!*z+&Xu1O`eY8@lG?KQuYIE zf7N6^t}o4R?k7U}vQSdnM*sut-?TT8`)QSt?tiJd8>o#*JHdT}{KX2{*uvXoHcT#uj%)YQ&LkA7+8Iv7(wL|3_$%()hYG|tRrrYH8=gpM|I?uV zpIY+j-aP**&Zs;61z<~eqEgD(^$UN$-ziEtUbC1Wx|V%a$G)059Impj&+3|4%LoA> zX3wvDpi^x%C-m==b@B51(uOHc?c7$IH3!`g)X7fDz|6^hh1-dUCmMk3dOAymEft2w zbhm)gR|QbBWt=a8ZDLSIynjq7$(q?j6?BH8Yw&7OiCwpe@Yq%yknh4`5*A%q)Yn_@ zi856}Iazn1DNrs14R9*w8K%3ar8O-Zgh&fLQ}`}pu@LOb&I=`>K~8FxBZb!^(}8hd z$Id<>oun^s`t&7RLoxH^FjMK9=cMSa#C&@ka(&76$=5)+%ut)bt8E}KE6KBHAvmm= zn)Dsuu!uJK>L-iFf|T2xH`5NsL0%WY>t~rBLz+zFMLuWlbN_kJqAGw@5A6qmFMypo zK88_KHZ5cxn`j_iM&KTE{_@0&yKAMT6Rzg-KWi6DI>c(B@MCrDq)9d$Vb+T*l?Yv_E$o(9#3{(@Qgfk=RVPGgk z_JputIPEbsRilcQ5P~-m0rEZ_(6HPXr?vbPb@o-G0*b4)eM*4m@L3vL9ocpSq_$It zck!6j!u+|l6JCAGz7M(eR5P91+-{U7uB7ov%G%p-g;?aa;-|z{C2SvW_8g0mM<~YK^u8WL+u2{UD*-1Wl-B4|LsK>h58V?s0 znDiVmwDLmt@LXg~IoZuDwN^*0kWNWk0iH(T4!1`_JWKV4HrlB8HfiSSDNZm!lMg)~ zQt?@|G-N+WQ1p;6D^#G`MK@V|&wTXfWs4qy*dlUNy7c0<5Tzp}krtbi$AdCuFI>E}bz{=`v0M>{H8pN~LyQ2hBJ^ z+f&CwykOV{upHTju3YA;4>o#nCtCigZmFc0ZxNvJ-Y@FV5#&ZS0p4uE?MX;I>Q1Mp zre9?FyxtBMW;ZW8T=1Ky^KPCe>;uCS*H&Qfc(af>CskBvEs`PmA=EPljB5I35vIDG z7Y_uexH&cK{^~)Uyk|QPa7n-s?GdZ-dx#gm$MnnByo0|&xrN2uK)>8t>lZIlNXYGe z%}`yx)|A&iATM*+Czw@3|>N|K@jAThlw0T_8K|JK<#VDwZXb1k_#h20|^eRU6C zw?^1z24TCzXFA39%a8XbEWic75{3NyTDHM11{N?sYJ9(vAokT8d_C$fUH;OYI`JE5 z*I~UNOlCpNKHzLJV*->c)f8f<#r1`~5%>&t#uccJXyoCF=PU6k7me^ABU&fp-^o<} zYmuV2anDa~d{;BOsgekZ7WulU_B^IJ=ESqDCBxm`WKJOVxyOVGuO!=r9K{8VDSR0L z#QD9Pf5*Dd!|reHB^AZfjz&=NG52E@dEtuk^UT*nxo3#o?u=6O6P;jnpzqG3olhPc zb+_F`3+5mA?^GWVms3(C7W}jH%qM?3uCRlN&xW^~n#fLt9Rn2NPIp%FThg{CaaXwK zdm`$fO2++sFr}8lu>o0VdVP_e60v3m?tmN2OqUi90ixXi`4F$tAB-$H@F^`A9UmR^ z!0W-M7+q1~@GG4si+Xl_%oi5acP?72?R{OIgs@v|1?4h7$i)T8716OXNl}02Wv%g| zFN)NtxzSmi3$bw$x(l38op*`4TTeAhOL7PUg71uo3^6I_>hs?i@o}m?lmwpe`RpF) z2o3LE>0D|e&G0A<{wpVlUCgDOX&}!m|FBc~#?8&%)ULXZHdnbFVN9my2{fF#owUQG zh%!a2F|@N-J&NAKaM&U=Wi^*NZJHv{Nh8YRgCrzRi#?=V76^W5*s zI=7{3_H*pQ^&iM=ltiIjaDG`ajq)X@j50(s=w(M#jDt~~>ED*05SMLRFWt&Y0mw5e zK%gg5Z1wK0tQ1IZb~>MYt@IOAff)g9NyKivOlG-b79_J(hlnL?_AM4y`!T7OIMbuD zXwO#sC9^L_shu=(_8%==9lVbUX%1*%_0jAgnXj}kJ1a}A6*ZLD+o3NX&Vi5-5}02A zoJn`?mdwmK#k!89ljq680BWY#?r=fYrH%>O+Gi)fDZrgO-Hf`H)1#scPA9l3iX+kDwuDXE;5~fz*x*OF2EbYYwr#!@S!p0Cxd0hM-Q@gTqAkuxZC;^12-q zNvp!vGoL_OEsq~r-1XKwgR*0mb+%JxXL=26%hM0=wP(kfr4d%|YXx(F&I0=_u#-+D zb(JCdYsfR7-4c9Njs5jB< zVG?&w=gCUf!2Hi&dAxJhB8)~6fHj&29zLvhjU{{XT|ImfOT~oC$^w2j+huJA(W2P~x#hkz*fQK;HSlSV;9ba#=!(`CaffSuAf?Iizs{d8mEt>8 zFB;%wiSEsXsN+Aohrr{Xa@XG;4O(R;#hwbJh*-V!!p7+Q>KvK66eU16Ea4)Knz1#G zS0`@W!a$vvo+G}^yDQq9xU{z95}w^SeX&lTlB4fDa)qXs9bsUd*dijHzZfBA$jSrB z?^sT6Ldmd|H}muTYlG)M=3=>+bhYzzBgxY7uNSfWuVMi@1iD-rOAkjl?&|^OeZad4 z@B(Ps<9T|_m*qmtw!*Ld1eCJO2s#$87@8hZ{9{V^fuk+R;h6^@j1{2L_POHOkEH-i7e5Fi!9idNU4V&+}UV(;p{8unw^@ zavlcD)&}CaZ%IE^Wqm@t85}0D$HYbN)ubNhdAlK@_5yZbnt_%m%$bR|{>}>d#9l#a zXHM;gjJ7ijljF6f+j9sSZCA9avOillrbu3nVP^T`6k>kMr9Tc*$Nl>=T_i}%=uxq` z&u$>{>-#hxZhA;(n>w!uD(jMH3>|dnaVFZFifCP^pDSQ9^xA0StSo3xD^3(*UTxbb ztP^$BW~s666w?DaTAS;$-I@m6e#ja)?XA7iU4LL!tIua6owEsoD+3Y!a8_RFwL}zk z5a>D#?Binkz1ReY&ztwB0Q-K}6arOHZ4zD|P_nPsvR^9`coTykLkI=AtW z$-ecJa#fM4w(^~W%-6Z_Kin&`4o`kf823Nx?$7-HtSs4_37X@KnwGD#5!Z4i8((@) zJoi5fjw%`;ye}gzg{yrJ=KI-5mpxEo6_*hssCB}YGW8F(_ite0x;H9cZH-s1T?oA~ z17P_K@uC;brjsR3ql9giSa|ho#a|orm{zz<*g%{>^#i+`DtB9%`sy6J)R3Q-Wr^~k zl#OCQkdQ%DOFrl6Zkt*LK6s#Spgjvl%u_;$-4Om_YnP7xLVv4w5u=}tBj zbswy&R}lrD5?XSR7-E;hxKEq+P;cG$3f=57Cfz4@u}hf%A`2EgK`rb{Z_G}75)2Ap zH{HGPAXbHQRXBpbleku6Z_$?^0R)i6I1yM=|-~ zCGZC?f+ZBUl^dD{fsBXm%gGYWG>*S$?*T?GAn8bj>Vx_buqhmr7Vj_V*;WXw+InGM z@DJ+%;L@sLo+C7g*pbj2O2rmu_+t)Og{vWI?*q)$cl9&{^IHQ8<7Ks8bXPIY$ky{j z9WtyaeETO$4hT_GHXI<^>cm{niA*N}V=&Q6F+mrY^(WU8b$@zd$%FnW*Zgn{c_yY3 z$GZY{<0@$Q#u8bxk_Y_~p&Hv+YtL=j^ni$N&vDK)*O%mbr+>>W%hlApsnQfLd0mAs zG7Vp){VQ7k&Bw}{*j0?+-gpW>aT>cN65M=>HfaWf~<}Io3P8jUym5NDI&HXlmHnH zyZs%4nE)aYanw-ZX4%H(4PpQ%kQK0yXtn+A=}N-S+W~@(n?buAy!!*4mtp~xTtrw$ zqaT16(YJROYi^dhtn|AKY3X1E>rYp8FbO>tK7jinx-y#`S~0Z{o0{GcTXO?00;CS4 zZ|8-;DC&2?RL7ThFTP!3WpP8+p?7r7Q+VwO0NZQDbHOSgo85MK)uvQ-L5R#K%`V{% zu83Q~yI#R)k1Okv&HT1To@uKeSC}L~R+aCw$rgJ#c+o}E!&jq^uPo;8sY9^p%#xxO zgZd|n8!z6jDnHA3Pbd+}FSl|T)qIelcO#b(F9>74831+0vkj^bz^tNbJLS=nCO7Sj{cW~LqC8iq69D`e8zB+grn&R7Qa8?ARZl8 z&?yg+6%j86+z%W;@o-)NAocpTVC=_FZVf@l+i@18&i-4kY$Gj=Jb@!})Oqr2o5xL* zyvY-qd`8?j3232}LH;wh!<(U|mdM5Np6(C45>}68xC&MmH=Po6ets&I4*gC>(6-P$ z+o>+7?P$?t>NJjuYzT!3bU^QUtB?)X)TD3`%g(m!nLD*CkHO(tx}7^^c1h5uT1!N= z;o~&N`;e(78gR)xDmOM=G&nhIDF&XQRXF|h;ooJ!-d*0+JLh+a>N$E-F80ZQa?KL8 zErCtMb=NiZtT_M%x|RzMo8o9O5O;h1AGUf86HCF1bB~l^GEz#-^mjmEJ7)YHaTPw? z_7>Aj-NV2sEF>LaGT9vW*NcLUA|(^bU3k?U zXuQ=XACxJH2zGfdgvM)Rs=T5R9prA{7Ge~`oi$$UtU07LO>o6YW)?P6E6mf(?^@;; zhiJ%%nGVVS)+hF=ry!V3`2{Zi_ zwXRPAJ+Uf5|2QixtQ~_UC>5v!;?(K!ff`whWpjDj9SXOVS)4P*ui~y4f*%^!y=#=S z_$5O2xq}UT_JLHoMFHKJ>JkX@dVvXf$ln7TF_Gi~=E#4q{$ERF%S~Dd)?XLF?;IEO zPNqr#SiOvy*hT@?umSk#;fVbyJMR5ef!5Qk#qsBi#tGd2@@r3%pR)V$y$cE>E{TZo$Uku4u z(k_W)hh?xVh<#gzdzdJoC%naWp`kGG+_xW70)+Q>?>#610%){T8Wv=v0t8V`(Z{rn zZ;_Y~3jtJ9K+d@CdsR_UQyqa-;pN}mz=6pI1B=yb?P)c$JQ#`*GSi~KZQCymbHfv zdjlZR)DXh#N9(=8Ae%>5 zeA67YIKnj9-%;N~FLSVXiD^1eFnlREwbEr4=!{W60{2wJr=rO^Kr-enXC!)kVK|u+ z*mt27#nr`6E~!G#$e#H%_2~F~zq1jT$znU*tV<7JOGvX20I$RZi-Lr5Gzyeto#)#F zNQ>G=`8GQP(l3VVjW#rnuDZHn2<+palRzh7Q+9FZ{5Gw_2ZBDktc(o?SoWl8MH|GI z9ZNWF{Bm>m2ac=9Uq@eDRtnPk5E-ge7}qbQJVa&HoyD+ppLu@oC2s60^sPeEgZVVs z#xlmVLq_u`!L%n*cy8!s?jg=fzwg9U|M=`&TBf#|(NG-7QwwA$sl$Rd9x&>4E{v0) zkxxE=iH}+I$n1nn5w5=OMoUiF;{%y}^a&kKz-qMe)mwbHZFmHbZPP>X83ybQo_#36GX`A7#zI^97@O4Ddat-5g ziyxD&l!bNfe{<2RU!6mn$V*fWUz1$Lr497KScXD0|18dS#AYhTmxR^czS8}39jIkN z!gB}H?lU{Uli!y_BM*W+BwneZ&Mt2Z?bJzn+iS`7czQ44wy?^zq%Z8{Uc;2zcoRNw z(}U09QX!P(flbY|Wl${taXtDtP_EGDxtfX#Id^AIG&2mLMF-x$PhFC$8n5Ge8=J|9 zTVxvG!ve1H;Y@`UjUelzQZYRsET-)8=aS3Aor*b+0Uh^lzm0HXAOE8eq{QeKrPf>u z79klztBz=lpAnDT=;2VOd@PsxlCFL@D*c4GbyEY$6AJ*;N#6G>fyn5c!@!e zy>qDbJr&ASv{|HuD=c#7xVwxl{o#mS#&rI-f4T`PaC?&Gp}H(=kdpkR3kQ@Fj z@0D*}xU7zZn#d@IAx#0qz45DQ^Tl&%9z*6`?6(=C3d!8XtIc131iYP;6icPnG>zrM zT{>BS44)u}9C*p=wvW?cfBq*WvyKDySExs9>0hB96Wx<_C2hwRv-E#=>G7}aO9<@U zr9@y_N(Z7AApBpTsNv{rjmog4iS4|=fYJjIn>!&uejhVtH$fQR+xt7-2Z1f*05KZ4 zsKWPOU?oi3LX#&coq<#zzodZjCC2S^h!{~R(+9`$T8DMFoo>Lonp9MbQuw|*#0cNx z<5HDcmv;r;!oJ~88CNG|!4QUQSwK$pWyL4zb_PtQp@X+x<{7j)?~LB##RU45JGEXEL-MNY8fce>ZRB`qQoecP=8U+_so5_GF;;Z&&oZzQ4oVY4t6 z==xcBezstZwea(vYJ|mVZg&gd1da>pYbcEpX-OId0N5xpi?5o!Mfk>Ku5^+bo z(tW}O`5a02m&3(3G_vm9+4J~-qm_ZoOwXMqQPLH_pu`Zv^1s=C|CvGjAFf-kXYYjV zr8ldc86gOdgp;iXwVrt4<>_a8nI4uBb21Q+#RlyX@4_5fR!ZUUtb{?2p3f5QwyQQ= z3ahTl(#lEk-bh8D(>x9e3AFe6N9xbJajz^O&wFbmSrn#5&FVt1R`FR1v=)LDPL67+ z)llYb2f*|=W7qMs0TD{BS%u~M??K;u6xB9Z+IFBze-zxfUEj-UUD126>cKhPEu|{cqN{gABT8aTx1ubeqaOD@$;0dvuq_<$ z&~fl4H+M>4xZeqLVa#960g3WKHVQ!%5G^GY*^}|lF=crcY zomN(T(gnE$wny5nER=UbjT@-B&WvkD$%^y8;z!*hLAs~b-l zOcKic0%xi2d|6*neHi4qHkz>v0@LozBeM zpSgd!r=xq)JVRjGM9y;}=lAK~6hM!54Ih?JnbGQAxaIrQn3mA}wC-e;y$?kcJjGUF zP7h8`=uiIedR2pTYn>15T7&EE7E$t@`|o}r1fSHw;l!(`Il=0qT-09SAv+~z4|Ujc zx-(OYgq>h&nomw^3u+~|RNie~A`RDubG8l|(t0AQUwgbpj%+T(11 zXDvilmK}ASYWZvj#D%cpLmz=LmMuENP%*A+Vw}{TGi*hD8CQFTJW4RS;;gr&7o=TR zs(P)`!oanVMW~)z9M0z(LGMPdB#qd`3z*rnZ7E)}?NM-w9_ph9=Ti*9p_Gphzql|D zhA>`+yQ|Acsou9;2NLtvUe+@MF! z(N67T;mEzs!}e4kzyxgd^Q zm;xV1PHa!fLrjVPkF+x)xZFS=i;uVSL+^smf&EG@0C7dsL0eIr zt__6Rux91evy)%m4ClZ8_SOI4;c)swbaAf2qml`=Fl)@yZpwgn5F6$pjexRRfIc;% zpnQFJXOYE%9e{RRiVfb_I|nKlVC%e2_INWG6NIG5 zkb7_nG6ony2vdr^2R|1b41 z>hrcr#q`&m|EK9nd9mxOQo^`m(i_lti-N#Z9eQ9Cnl_6NDHF~H)ZuV=RvjX)f->iV zV{+Ti2{(0i7k2f9Pf+i@l|!ATP1G3t_sirVX%xK|m@pxYGI$$ike0ZZA>+wqv??3f zNd`0TM$Q_FwkI=6RdUTZ@;ex1cr%%utQo5sz0P0ljIxSSt2XVK;aUDg_8z#- zsXI!&)w>pt7vSEeI4_}AJqkK{Lb4*)yoc@?;g5BFk1@GOu=|^dhy4~R+<}#P(wA-fG(Xg&(M8~?q`CSMIiM>2iGaC z;J+TJM7J-fkB^BopRZIYC2XjbU1QRc5G^hfJO1TO`S9&0Ww`%kvH4h}6s-9dVDHx- zt68tS0eOr52?EqfGIs(A`DQFz#-#ost+xj6#~Mng!+y0-TCR(_O(Vb0k=8HtblLte zwfpS}x+vN&e0^BCLaE-9lrf|^td$q`>p9alnmfK`mKMopmrD2eFY(bD|KM?VK+3uJ z+f_8fihNFRr%i5DOZgt0@FA&|_U>RFwUfr!Xma`KC}K zJtG%q{cuWRWjn6gmB)_yjlP5R;$=}9d$uDG8gzxAHU4cs-5kZ#lFrmel@-za!YAOn z*3}i^`nb>!H#%9+@yO(0{E>V*>?mOPA%mc{5+(y$GB72fb#YgN+CVVcw95%Uu0QKQ zXf|KR8m{+poj8w7JpxXQ=|U-XJnduox8ymwc7|Sd+_Fktq}^AD1O*T8`1ibU!@m8_~Fo81gnv zHDRJ_niWA*@6S@a3W;%VEATY^@s){?l+`C>XTQ`k6-3*b`5t|Nw+D5%u&3U1Ucise zxaYI34V(Af=gyyLgn7%&?ytAyF1?@lw4O|7h8u;B>UG=Qhm7;sw%cve=B+X$vnPKE z{lP&TOXCFmjv zx()baO2H1A+7(duVWA6T^5g$`N3&91pcOqrnXUalCMT~i;JBA)Nzd%X{-iewK$@v- zH5fy!QISN1V1wMb1Zj&llt6}%I8Z5f_!`SV53II}hI%qJEqhhRcY1;X0^yPy;jpsW zJT6vnC!N?MsazYpmpj$rcZQFL`;}LfpRFC`@8cGQ3)9u|U!wNKk+ajzuTshqCyd(` z9fXxqYpg;@uJ^v>uia{cTx|HDp7CPr7Hz`!phOiwkG|tmp30`}hbX4Ko8Oqu4KCe& zXs7>T!?QzjvEqU%$RilyW1$sa#4ipVT}FE+t~xq4gu&d;V(NRwGq>kD6BKG&Twf3L zVVP&cWO%TE2SYprLOx{C#%zEo2BK#m?_D`clK_b}SN5Cx<>r15Ahi+6r2hZzci{Jr zFo*i*JrVwILG3@^TktuyRO9bYgHU)dC2nmrr30GPph{$xvSBI6(ZDaG%~=BNYhoz$ zw11ec*a>Ro-b!lh&jPtjna$&nh1*zx`&P0 zr!}4*`17afRcLZZ6+P1*z>wmnbiehl1jm@mFVA=MgvP(MvM+qia6gR4r>_L&c3g=3 z{j+X->|g9S>Ko;I@erl3ddIXKri}WdMB1FS_CXh4!G-;2=j37Bx}P1%hXx-G@;e2` z^)-6 z>kpsI9EG+|<8^X>&>W_b8L_R($ELl@1Ey#ohT%0c&T46sg@_5^#uG%8Fiw}S5KmH#(iGQ%NWfZvZD(1jmEdh}r&;+i8GQ67f9G#OV=z`Wh0lH(1 zO|7hQ9MmF4v>ua@AtscLt)g+^wyZHkTLl}U4OG0e66VtKQy88zu zOP{#_EAw1vpZgA6S1+WgQnYo}l7?5?Kp!W{f!jGgi^o>Cj6EQM?dx(9I;n^5`Y_j+ zBc0;Lemq0!v?=Cu7{B@e+Oc=_e6qfjSzF4iUUU)Bvj8Itc}+5%0Va5e34w_ShV3E@ zJFhQh9B{H{E|+|niw@=#c^ljdC9a$`NUgSMEKogiyTv|0td-W2AXmg5vy0c5M@Z@D z!fqH`=V-4UDyHUn_W81nT_X9UR+j}B5L&gFpp~Nz0P8;+_3*R_o4xRs;WaK;6}*TP zUbY05&5hgTBs!*cH=2*WhfI5;f+aW@3!bdCZ+Q(?zPex8?F6&EKdeCyoPRAF%|^nL zhXX?wAp!@*%|o2V5p;7(q_RP^#w7*$?~z83z+;9**^P*HM$Ph@;brl5R5kK(gaIVs ztNwXymEARI90Ot*;iMAq`r_lD!QLVWu>3C-deHvD$3fWz;V@_!ApjyVUVI!>@YWR( zSw{GO|F@W}5J+n@Sb;FwN+3EW#0QLY1Y#m;EHYG|iHu0=*oU)3y}Gh1q6VG#Di$!# zT^Wo`J>1#L_(gc9b(~0zz#pcpG~F32>^}#sz@8woFniva=KdB@b%k)?HVIZp{qYL@ zPIiK5`jBLQ{7Zj%_UCZ-9pk-r!uKpwym3sKKZj&)AjqKnxTtz|F~+q~g6uVVx<^M$ zUyLl>NVsq#J>R`$>Umn$p5?jcP)r%T1bnezZA8YJczs{PkmH;@mt(8{#Ls(3IxdO+ zDZGJ|LJQe{5JL*|nx&2UQTgXQXG%j-dq9^>m9xGzs)LxsPUFb|eT!Bt;I2jru;>CD z;;XnhJYA~M(i?gaz__*%|cb04gp=m7vj7Ig@o?6ZM? zAKo=#-VpqMOC$Q&m0tjmrNshcsTnFRpr-@+R2i-qg5`iZ8$>L!(dc z-$4%Mf^3Xu*vlO_w_f(S7|gs31w zLeScdGZczMRKE`z6Bi6T2!3B)5ZfeL+$^=Zy&Ck_y7WU5x(Ig>XHTJcC~?mMJyUp< zwxsc^NbE7_Q>Kv(<{{y7W3`qn<8?7h2yLJ}`Fc1RuGYrNYLMVqLCh0$i2%;+!BrpkUfCrl<( ztNOb<$;)U8ZMsiZ43=3lLZ6V6vLs1_chr%Bb$n}61B*D_fpS7`m|cDT&G{4A_VKrd z=6XT=In$}-$KF!!dQa+fsVS3VOoH*4K(49(ItAYvPOYcs|6uJngQ8UD{lYUQ$LeRl%lhI^uU_&WJDA~70~P%C((@fD zH*)cX_1=c!AVBJ2zS6#mY|HS$*Ok1c!^`G3$EkMdG?7Md3(j^S?a)|GOykwrZtlty z@tHw3CbZmdq=Liu7?#Fend5ol>2bsF%(R4_YOX5|M{2nz4fKV>{79>CgFwX|CbfY#fi=ht4=3dDYG=g7=1n`+1IQrAA??`G z1PMErz}uh;5E&9B;p%*Ch2aP(4Cq5&$#cP2xZhynteAvO$Ht9gJOHmLUM?X9j%&}4 zfveaHBd#zEW}b@IyS^Ggs_Gs=kp_v1H_V*6G>oFTe6zCJ3z>|SV$~3T>oLu*@QFFf z#F5|p)%RbQ>TmMtJnYQPUiM6JF8V)4?Ml{WW>Clrb{;z= zx}ZmROcg&;8ug8xf0$<#Ww4+EG`uLHNjnI=EDR-PWzA5J@>|D%2p9JLZS0xMThZ6} z^Y?l^I=;J8m=h6Q^T!V}R`|R3NIokaDM@9{$x9Fj+4C#D<8N*mr7J1(ACIkasKR$0 zv3Xdn#~XwLMc_#R9XsA`?4%f)?S7jmvf;QD*s>>&-Abmo zUtvN&60ee+eB6Me14Wh36c@P8wnn2j(Qdh5@~X&7Q0haUytemvW@C+o+xB?uTg!-wG!^x z`V@t0iO4Z}}FhjTuC z7@gEMf}HnSCAWMBo7k+9b2-nUz(r+HqCsbQm*G`cHM&&%i^OnugB4BdTgp*$Ephgq znQaM~Zo^<1eH>DDyT-zQZXJipEWbrc^9Vzx@YhH#cCVV$_m{rMaM77YPAf{Ns9?Sz z1_P~xmI-hr7{$Z$@6+qP^JdNV@L!NLwQ8`<`@7L%dUlYD(FSiHe=l{wkZenThp0q@)FLwE0tFbl2j(PYJ^Zol=eAjji1qZJ?LT}W{aUg zQknQNXTelP0tk*YT=MdOplr0bWxgO;HrUZFbNFS64r1q$FLYW9H3~1ti ziZ~;2L$}+&$;7`sjX5@L1gzxi=UtXL?z);w@SGjnV+fHj`VDc;F>sGTR?!bmK+n~Z zcBWh+^Z>@8qnJK}%q%%3;d$ei_x2kiC1}z>Gl|KnNSr$bAC+ULU@`18Zfp=`eC;#Xlc7DkpKWM1+=HPP5*OA4tgojdqP^4D^~yH8tA90QJt#X*prv zU`xmAxH3DTA9Wd|@W8(Oc_;0|3s#E%r2ZAS#dTIfqZQHgxMa`t3gxf|)Fj!w0PYCe zEgq~8`v;+MvVdqy@;Iiu#?0-|*GpWN5X6IoK^vgl`PukmhnjOY1fafk63{l;U|}~G zN=^D>J}X694Hrr_?;yc^>a#*udu*wZTgq{Dfu(%E+I=uT8Tl>1inNgS`;yU$L*y?B zC*qE~^PavSb=scrkCzrzY?@ZY@KbbuS3aKEqg{?YH_bTfSd5J+X|v7nE-#AbQ)=<` zl8$KUX$O}p*TVHHpRW&|8XA*iF^vmoXx(bn`)hsmp()luf@G!>w2LC!g(t*7PyyuE z~mVUjmTe6z)q{U%9RidjwhQuo_-iDKT;g}-&Jg-4MhGdru*Ii-H zLK-NgeA74hC9OP#TzLq>oSko?-}?WAKZVblwbycZ zyQ0-6OuQ-P1VN|UDluVr(|@z;gA*Cvrd?;6Etn$_Dc9k;K7VI?Q}z6xN+Ke2_Vy)w z%oUc%5{qQ9aQXNBf`-H}2~X9W3(7a#g{r)w{;gGL(b5UHQ>nE;w~7AovVl~1wh?_n z$kky6e$62z!mSeKAaBKO6W?gZSgPDH(znTg35YOC$8wA)E-b8!WT{zrVE{j-y@^hh&nWrVBtCE|7yq zXC!A(Qt#!-1%4t;Vv990Z+vqdFKHI;wyK!Ci%HT;%-oc^RPLh7`$Pus7BOq{B4)c} z{}E0X+&F{G03MsZ)VYpk+ zK&02iX!#@aL|1&U7hY`D=wHoY030>D?=_FxSk;mlI+v+k0~)GU9Y!uN>KqB&E!!kZ zkasO)cddB|h^PCBGL=#?{)2>+>m0y&+>)u-hu2396Kvg^7vp7cMWoVyyxNs=xnLHd zxJMye8ThDFntC;VJ)+UKJ5#1hg+seMps4cUimLV58kM$8uTcF2q4h@&hfW>VzM3%f z8u^F2ji&Am2|iDe_mNo>AT|qeLgGAkeJVY_!o#86oL}3^&>1I39yLfpc;jvX@N=j_ zmy1=yVFt-yz^~}be~?8R*jCi)7K@gXg6EIaD7__h6I!xSE@2Wp-EENNZT{7fAlIRF z2jA6U$vW@muDjyUUsOPS3=yc$YrFT>_nYMOl&}6UrMC zmN3-eAv23yJUrp+2^Osj z;-f#^XEICNTk$~V@unCbD)+va2O)H6eAGnUC)!LxLut$rOR~$LU9O4X*aIx@P-Dg@m0MUgkwv z$Lf-(RJ1@%jAult*mijMG{)EV=De~ZqGB$khO&y^MtauT6yZk-)!)g6PcyI4C^clt z`VfOB)D-b>4w8Or;b0@eSF^fr;j#fN4K>$?nT1Bvn6{o4H3{?r#rI<8*+f40DaOQO zNr+{0%O(iD06qf<|JZ-%_%g|qXc&tE6#2oMK+xFh6ymY|ymrBKyDJF;>n z4Vzlr+R>v6$aJ)LtRzB3@#&q+rl8x{F!wICLb2CO-`bSq^lAefXW0M1hJek?YJE)# z8%~bxsYEWZLy?Dhy9xE&BDR4iUtYCO&pvujeR*e^Xs6KS*7W?y*?*+D+ZPTh2Txbe z%Hc4q^aTv;@UCQ4I_K$~KW!R9oAvcP$0g=-kAuva485kptxZZD|Cven%8D?nN}C$I zfVLh|D7$mb%~M0Udg;o;%lqky7JbCqt=Kw8YbL?QU8!A?s|;V-x&hYQQ0_ViR1nUO z(jVF@-%=g|PYfw6PeY4-7PeG*FLvOq;9%YY8m+k^e5t0M$4zE<>y|KsG~eR;(RvdM z$s7J zAZT6v5t^K-YZrL{a)`=v)WPDsHCHy9(8DP%S6YCHA~ykf^WO9g$L-sP{4ml_vj*V z0{@AY^Kxv-mx+k+mQ^BBqvKgFa+8j3;(Vyx zgfvBP2rmRaC$WZLqmDlHy7C$+2TfHT*|{=I?b@q|0iQB!Awu)WJB#&r|76lFTpudT zZ&e7FQqz@ zO1+a!D94ET)^ywgyos>{2>IF-AVcAwF^?!xM`a=R2v@x9!XlzQ%^q4|{S1P~@`QGv zV~`i!L$_Ik3aUiYo`#oM_c75c@yImRXEW07EW8(`^$z;I<*ym|TSt0du%#uXyNP>w zzYk^G1$0N1@4KtWj59W^@QiM-%01^pifVqd;p7xrUsBi5Vs`4!wbbce&K$_{gnUWY zRFMPx*^)vIoj1MgOek3tT+gzl4YEPQ!`F^8N!9RzkcgP04`UJKXe=TdY^)kfKM{Di z*(Wh<{ZsK7SEN)r+rbHz2C9jO@Ij*4ZG6@ei+YC#7m zXE7AeMmT{sud(QlxAKxL@AaVIfGB&>E@C`6FOi!zC<73!mHxNOc%ANU1d^8L*3z;3if zD;S(funoiBY2b+(tM*Y7n0A370!5~vt^5Sg|acv4`z zJD%jaVq%Dec{+Bm{A(uE;K=u(4fy-#aT>%81gc_T|LJt#1lq3Dn&OPRA8avn*yxYm z5G#eX%ZnJTp~h3g$7&VLf6{XCPl&(mKG$v%#nlPs5Se1fB5GOiF`uN-%RFy=X6o2x zy&eUA+-_E!`M)&LNNILxtcZpf#Z4;Hx5x5^k=uQiO6^JbW0;FRS4~9?IjPpb`Q5R zb? z5$ITvpTa6>Pbz)7A1=9eqbwiGsj^pTYgh#&k5Kl7Odc7wj9i5M=7rY zRA*S6J3+a`-lEscMI(YTwGeL@8$78w0jF2sWCdw{Du27AgnRwdtnd5^86E}gqg&)VaBJs7cJd)> zjw_{Xi_nql%V585@8m9HktmmJ@PW#gt9`_8H?c5bE{6R)s{jhVt{LZcS5%wNJp3?- zG#KiI{}M>sgGoxC${a z4{Sv6HZF+g!bJEf9EzriND;`Zt$6a1b~Ie{-(Z4Ch1~>i(01X>$nz`<4Mj(Z3LLSq zon%3MPtd8prv0`3ky_Bsw7`K{weAxx2*c^$fFR0{n|F66PG9~b`zolGI5@X~SwL*l zsGA$}_VG5tO~45`gvQ-R;9@deQH3S`P#Bc=98%k7sjd!`L#DY|C{qSiM{kY#YXf_j z88@<@*K2@=9TGVMW&6V6hc?K_2>P_UAH6QfO6SsD%u`K8#y>7#@tmsF9MNvw(H#jb z87*k`WYJEcyPu5a4O%;pvh>@Gf9*Cm2)2b5s_hz!X7NaC-IQZ=1qR z4=!fvqig{so3t~+<|>x>H524d{nl^X&fI-FOy47=yxG^af`9P)!Tk*4BCkO%GP?c| z!^Lx!^v;F9V++1LWG6TsZL?(FSCp8u=n?bdydwjr6F*bit{@DF&p0GRsfu#1oz+7f z4_{Bub^T+vE&lF&ynP}Z)MMD26z@k`t5>c2I=-yA6wad#If(qVCv8sZ^<$ocf)RQU z+A2`0qVWGg^|xJN%Uhqi5RSS8>p1XRtIRO-63!LR$@@mN5!E9JNaHEBd>t7- zV!*|q;3D!j8Doj^)-EYZSIBlnhM*b52h-e9y*}qE3~}-L`SlsT+B)lL4OJkR_%o!cM4-h{B)bp zi9)H=`xi(5e0#Bxs9)RiX9BGrmC(=X#g}WsdR>Uci3 z*O`m8);#X=m6Y|6aUm_DO1m6wHBM)F;p5jwFCGK5g$^6X?iY>Yp8xrF6Pm#4H#hD{ z_JQU*Kuyf?c*t;3d{tFs$AMM#-Z5k1>!*tfnjYo>Xs~2zgwK7BZFZy?B~V)$!)VAi zcvl((8-G-P=}_mPv>i+)X7!)Z#|<=ag_Y0&l`E7uYY}p0J>{2dz>+;YyO7A*(7vg^ zEomg=Y))cv{DsO-phL$@?RwjalHn+fKsg9?QtkZCgLflq55duBRk*_Fc0!(U>u7&8 z9RDP}$l0??3NleHRkqFaI!yTt_DwYLyuO!EJ_Z%#XG_kwZEdMDzgph}0vE=@k5*Vh zN6=1^%TtHnW?Hh+2~kx1!Mi;>quR49)nq;PPeVQj<=rcvKY~m%>$c`4TiAK9SIrwS zN=gt-@$BKbnI$&EwwmwDRwH*D<$LRnVIT4%wJ*Q&;$fFiFU1W2 z2h|u`NXFqEtZRn>)qH%mq7yYf1bS6h+`FjonMKoMkiz~e{mDhxxVhEF-&tuNJbO>m ziSh;_sCNuW$GV6e$yvN2W3ZQ*pEqac1D~`EiP4sE_WT(BMQm=j=7}sY20F=1Q|-x6 zyDkBa9sef!@Wa%1XB@--?CBh{nek=H4MDq&UG(Rho^&d|@+zbbqz~_E!Bd_#-cuc` z)nuNH3mrS<5FKaUy3o^|3|yTZ5FMd4wlZS$JN-GMMGlZc{W(D-99oU<9nV19r-{%E zXU=F68zuX-k+V>>iKlg?Oh|Y7V_x}DUmo-}Bn==D5%y2OMW zgZ4yMDUMd7fi5nhlPHhtJ!N9uk&4vOt&0AuJYI5q7aag`Dac^J+4eAaVX{fhk;ub7 z5$BS;$gWCMXSr@;X;1=7-2pFZUb2YT0|3(3O-?hqU{^FsMz+Av-*TUdATUV zzUN6Uh*fs~%T~QNs0RV$k)`@bZkvk#M68FRgk`^lSHk1<+w~gHpS3IPp+3+$C+YRrsL$?c&N3~Qp7cmF@ zVy~C6BmT1Pl(yjb?v@7KPv82&y10W>C8u?GooBC(_B~NC^G+EPw|AiA0!&Xm*r>G+~`mC z_O7N4rPEw?Zs{Uz`|UfvPUjI zDcrqjey4v}RZpp+Q(66ZpI(?VVLab+&xS_J2z3ba*ZJnIX{Ec{s&V}r@HBsX22Zcm z&g;99c1F*5{$1MNhl+5h|2q-3=QVUOO+CM*K6>zU>gmY?XU){{HC=B}iV7*Qd;19_ zV$a+=)a|i1@ruzRexh9_uR+E0?zfPZm9=+^ytX`7b3?+PFeX2#UU`>10vrw}BGo$Z z^<@-^@S57uzV(;?#QaNE2F|xo9M!rx=+lqyqUWWfp+UBeZ}?O>CU!jYC6`*X*|W}{ z{^}>}qK#X@@#kT?zK}IYQVF#vb<&j;rHU;jNJ|JUuL&8&HDLUXrWKqUulgUP`2^8W zx9j9gT_LAgNqKysj!nqauXI`-Q1(5BxjS&|H>#ia@s`Y$6nA62jgTzX<$s+WWlNe+ zWI8W686&2mZM#N;_7MC18nbz%4UTQmN#MoUT z%5zARtA=EtRjFnb6O?C|i#0wwlXL<4CbK6}{}3Z?B=kZomi=sSyAv7~|4m}T>bH14 zCt}hyj@%Jlst>`lNcqEJGSJrBzYLIFnG(v7DL5{GZwz(-ObzDNp~h$^35P0*_PWZ)@IX?^+OZtq+> zM2Vu#`B)mTe7PIG5adBat!w#gYU?}R`M+%=)$mWyBLlSwRn~*MTch5InS(f3-z8G0 z{Q%tCU7*&Dmaz6+i%*@bjwO)yJ`t-If*XfcFQo-3dF#XiANjG`z2!Dd+yfh-@(fI_ z_w=B>&F`k&|8DVr>}&tNFr0GMm^rRr^*3)y9Q$S65r9T{i8+SND}S1xU-3E;8S7*f zC8)1s!}M2zrgpkKVN3Tgf^5K`P@>EO+zDpqgKVB=)H5OBefL z)bsi%KN2a?v^umZ@TPkW*8hzNYml`p9yiggC0KegY5-%CS#$DMvoL^3qs3GX4)q zPCqJfX5T4_&^&&)lsO~rqw~_Rkx)OqBF5;|* za&!#4fQ|mzZHCrxy*{BUz8uOp5TPoIVd1gUeipvSXqov%ynCnY;*H?Xo8e=% zU;S#mRo7pslVTM0fb!rF8ssuu4is67|HOh>Y<2tL;wEI#7c0lfFm7oh@~nj9Qz7QvNfvWb{jKPB>RDuV{+T0i+jKj09! zTZcMt-V55Nx>b{{7B|mdwx}55Mwbl!Fkz8Oo+6$R=Vh14bzmT6)C@|RI=?O8=m6cV zakHQw4YY*f*=>ZmkvduGJvEl2lJ1PiQl25R8j8ZvD2abc4wbeAba+Te=0VJ`BSkgh zuiKK%i>iNB*`d8Z<3;5kQQzi%+4&su58oSQZCtXEa!In&iv5|g^I{5nHh~Z))rY=G z#_Yw+l5f7uD@OsFC*SE7yK!GYEv^Jgs6h ziQ(^*r%e1#!Bpb9N(im<30UK|G`OBTpGIv-bE=*sEU~wxiSq~cW#>45-$sU@0Vb!Y zVzcncHvU{IL1>K7CJTJ=eN|v$8;-utfqDOfH73m-8wbL7~nFiJ)qNC=tff z%)Q1);K5T^H24S&2n!2^EuoLpS?a^qBNC=beJ&4e7I4T-ZwoQS<#GTE%Y;k(&2W<% zW6(L+f8wl;`aR=YnC_7m?O2^xoiEB^eL@N7Q*VJ0z@3dYLF#_>xDzktc)JJdL3q;Bl8=DH%9-M@~WvTWmw19d^VE zlYxQYySk>HIHpoYq8{_t6mIgZ4j4bM3VjVMf|04O?qrTcX$5`j>No{q^b=}wAe;i8Qm;0gUrS0BLZib=R&+e3aOYR+U_-tBIs!NbRo-N(= zjpEP!zgyF)GNbD1d?n1;v$Rc@=!(NpsNdhUH4nF?z0~$z>Wv~)b+Z@0{24|6gO^EI z#a_K3el~WBuBa~=QdcNid`RL!hxMFqfvVP~*wzZ}YIw|LMNH`<8EM_o*nvl9Xv0P8 zvyEA(ATqSt>%KJsB9mCNmymdBRQQ30Dq-pjCXt56FwF|Nj#Rt|c@0`zw@=}ILETj0 znbQ>EE>A2fekp};BGYE%lIPvS$1FVeFq82UU#<8RwOg9XPCEVbz#Fw z$mZ1x&{>^#(ZW<`)dD>x$HaQnm}3q^R#fR2jM!C)NR^I_${NkLb#Sztse{et*qKwW z&8GSg-g}VnUc&81=`C45$N>)q?;7q0sg}V^6>7LdH#pfs&IL@hDuYk08H_zGfdyQQ z!BKW&!}0VQw|q?8kTy98C3{z}Y=Sw8Z#?u@*ioy+fy})s)nd-xxX{B#Uu;2{zUdg{ zG$g>4)H0T*hu*PqfAC0U1F|Jpj9Au|Okxr#Dt+q!(=I4ukJ8aQwNlUDm6c;}Hz;8i zKcg>1kEJ&HxH26X&iFjl5-ip)DPBTLM!ql|d?Sp9zrCV*vWXx5&9tkfZS+~qUmf7i z|8r>ks{m7x;6$DH^y&g*!@*h?FYVbm(79%#>_@0@@NH^$`6h*hb8x%LeQMmJ*kQ{E zU%+wSjrW0${lS}D0mlT{C{b9XPpl3`6|Mhy`8fMRIjVC~wHmlg$jtKwN4w;1%tYA--e(hYQv{b4wt*I1|xc)bk;y)hFW(K1nG0i(Se7y#}Vaq6-R1!&w&9lzc zYre$>Bxq4?zeUYHerC7vS13JQT;S_Zx=J)}Cno!2rM-;_WiQ+EXgW{?)=Tq-FvMCD z50Co1#vJVf^gW8l#8*WImsVwOvHTz6pJ#n>Ke0z#w)&Lj+s9RR7DmMw zPGse|&m^@>-eyjmrf0#Y8H~SjdHQ)v)8Xsm8JO)qRe`6+xaZ;^Rac zasAf>>`wE;+}wF(ZB~gHXJeFkN?RL4phE3RnG0#mBnTVHUwWFeG6>Z;_2UMUUduK- z)=Cm?;p6i%0ulK-)FpF>gqo$0)3p|y_>cI_FrP>LmEpX4ZVhmn&}XQBIEV)_KHBW& zj6>RP(noc{Y(aYerUWkh?0;nY!S@&7bPhHO!x16O|43}2_U=!9 z@5FFZj`yi7j{`lfJ)3U=&5vP?8h0LEujB;_Ydv%bYO~}ZO^ZrznB$Sxwi&#Uxj{7= zBE{HTb_!Mz1hooPWi^#G1IL7 z1|E|~#1=q{+U7Hf{>puM`10p&RdD^HVfE7R7(;KxyQxaMWN17ChAUQ z;-a69soQ{c4x4$#vEg)k+Xb{?q2OGeIk$>Q7wI$W!OKvso3GPq8^pBK)!zk~RG;99 zsC(w8b`c^Aq9-c4z!CyuW0<*?Kf z*B<-ioTEX1^VMQ>kiZ}8hIcmNcsDAU1I2lm*1B*&*;kc>T*TWn-D%rIJ?^N|SNAqWgwIeWA?m;bNsSl&Z{VL%Li39XV z|2tz~n0>=3(0#0SA&I2Qw@0nl;gF(bF7#-1%4;D{x-;Xf&Mm%tpyN;ndrzr7-eU`n zqBY(IJP!!#^E?C0?o{;q*Md0Zv*#m^{fU*T2Eqi#PtW3saq#Qv*4H4nCkDS7WtI~6 z%l>k6*p^8;ZuSVNLQ_9c<}=*I{Na9W!M}R}ln^3T3Z5TCd1zzr?a{x!t@L71SrI0l zgh^;8|7Lk~r}|nyt=4cxWr-({`qjdlXoLjAX4qtEw?hde)Q>B2%9_kcC@mmU(U!9K zs?g${`p1Fo0puhO|NEMr^Sq`i(tr3LK53(`HYdk4ijtM;xkb4IxlGzFLgh0&lR1^! zS~*FOMC$YPx}#P>?q#liF z?N+Q$5L7|*S8t2@v!k=ykkAAk!r@!$h(yB)g~3CKdidMVFChG(L7}qfP{ry+sm$Pw zshh^`ZjLeTb|hr!A6#TITL&n|-U_mKtzgSsf&rzA{T)rG-0gtJO2_GjZ@#z%4F2YY_?d;^zw-jBHn`Vt2M*CZ@ zR%cqmafLbh8{<%rzqSh(=B{1NOqIVQT4C-N*_||Z9E_#zgLY{f9jhPJTNk)Mnr8IW zPCXf_@a;I`*@)u2xZ|ZO(OgnN#8Kij^#i?TF7RL=wjDI)ib5aPzbMKLjyorH6rz4A zyfyM16bGGjEiBpMNE>vtg=IQY=ptZ)1n>PxdsO>|7S7 zw;wzt@Ba&lq3PckvPHClReU@TD;3h2X-Z(Zqz&F~_)7@_IpYw%y^R=xYpU z?0EXn(gPTu^~P!9_#^u10iUVrZw8@DK1|2^?m^Y7;Lgx+a;P)Gb^Hr$xDK4Q=V&L1Vq}Zcy#`&8 zX8oJ9DEToWX`p)xF5^)G^Kj~kk3cXaRT(;Ns3y#}bOvY9GW`z{@NReVK7>Bi@u+a1 z8$6m;69d=BPC(Jq#Hf$ylg*Xrc2ZsvV_C6dFw0N^y4|uK2Q^B{CA}U%4fbDtD5jw% zcU?(VZfz_~8=Ch&MQ+qC3BHfKWa%DQwLlfqQDkx?bzAkMbAl4~6E2&|IUvUhvimRURGre}p$rKS+K$j94+ zX;?h9+c^O`SlOjpHZvHTc8`@>$GYg_>8>xOxNcjo)r<{U^Yr{>z69R!mhu)n(74_9 zKAka;vQ_zA(H!e-<_B1sZsb_s(9W3cguQxl_MG0e()6cAoU*SA@XHA&gd}OW!yJy& z*xx=2|E3IdzMMY2=)y{3tCg+x>}QB!2f^t?d0daPYw;0QY*~Lji=H8taJlw-+#}3; zm}yhO$_;Z2^_w#dZoP3z!)sS)MNm!D8Fge=${Mf1uf3i2ZPZJzc(u9!D6N(4L%Vvp z9KVQYL`BnrG^zJfN(D8I5L`93QmKkRcGb?U@BpiT5bDzkaF`No{8t-_HLGPIdhMFt zar`Bw9CwuoqkZ6UbPdM;$JCWTHFb6C{GFzTAWeamK3!Sqk4YYW!zwZS(5@0{>n!eN>Jp1lc<{cPOEJnl3Hg(~Mqs-oZBVD)zlmHyih1U}8_ z?9`bHpDTX^O<+5K8&6M*7;aNGA5!AfgIVfNQUeELw}$MHDN0a-`>+66%n&T#^oPya zzxHt?o`LEeg~UG&&+g5p6{zgcuP;f%R7+9*&hm{z`QY;X$-%1R{w|c^4fTJ99#CDQ ze(>cWh_=MdkZi55O1a*>PjXN%zbv<4_J(L>fLwGJ(AP^xt@`ZIPR7ehH`Kh?m`XXa zKUUq`ptN?_oVk+v?u`oO^Y~9(RU%r5)fR2 zqExQcoQijlZ52b}Cz)DuD07jZp~~UWz_B|5xZKKR6#dOkx&U4Xm~gW7Fdz&81RzDV&MR zt95oB)mbU=pbLyV4Jbw~#DfTQGk;1UJ(~t3h)hnkG7}z7Of696rlhs#bW2;q!fl?X z$-!XDDFgk4a_QV9Qw~elt}#O&pztX05%NFA77v?~2tTM+>M<3hW=VuPBV9GV*M$Nw zCh*Q>=4d9MNY^2bj%~&(>vcYwzm|@>;-&!vjZ#yq{$MLRRR6SexMtIIg4w(fH(&cm zI|4-lv;u1YdP$5CJvYK&=yxgGJ2RCRRK<-*;X8^P!5Ou*+1@LV34saX7Em8^)kOYb{Tc|V84JL}?y>R`C&k2m!k_Is3t_r%H1qeTE`m#}+ zpH>Gtw=0g`O5gMCZOj?7qic8Uw20_-Xuo(&lOzvc(B$HPZlD0e+{=G-&5W00~>2oD6sUF^r-ZJFLI z?ydw#I9>1Y)=3ls1`oX^4Sc%Y>-Pmbfl3NbC?cdh|9=KjdsCU-|o50B_m$dM_3 zz8Lw|`%c~Ne%USZsC&k;EXB=XWBSDkPsT@trbv}KWT}dN=7S7XzBu=gn3Z+J%0*cy zT8Vc0eM_{>-&?m^R_&k?_?fYs`+b?JKLeRRb23&n`CaGG(F7mR=58cg;B`OvV{a!m zXi56T%h3RubO?lgDt5nEHS&V0_9wmCr^#+Nd9y zHtc(u;zf)d-z2^1TT6b-)#6Ri0g|Fica^`Nh?dU-e<{=UDhKMqh$kKaMHN6^e61>& z__dRqGm*_yJ6{;=Q(64?i)WIn7dKiZL<^=rxE7|JSyr17AIITKj6PO}6R&Mqj&XR2WSs^@op;aeiW-rloc;I8AMgfSKCCplJ z)VkjWH~tq9OLAb7PEi?$oa@p7hjQzky zQ8S@A&&WlULLJ(6O(>0iwO)9-YODAjNdfKj|o#iCie@2X%msOE#@e28j%mbs5iF-2@C$D3z0wGX0 zibpHOR(Uk9S_7#Q6lszaTP>F5p>G=+C?Zqqd_BZnBP02E1B{vFk5+N^-HDDaua;qv z%lERXty>l@K>mu_ad&z3T!0$l5iiuPxvx;_V+IwiUegNn3+ z)sf0VFhQ(ZoF=F0^M%SASSkdn3c9!tJu=dbKPK0Mw@oXC>wm+7&O&3dgh-92r1+~% zIo(9De->IzypB!rqMLjEUA&<%Zfe$wf`34hvG16xRzOY_q6r|KHMH&RQ`A=(o5O&n zFH4f_L2KfUtbyZ99bogR&TJ-^t0OGj{@y0vR0*Mbj>H{|Bii;u(q2I&j2^quuS*?x zo1Wug_jD4~eT$j0`PHArJVm6g8#w?9qv*%(I=%frV^P+0G#&{w6&U zJhMY*ebu&t;S&AbGnPHn8Rq=c%(z)U)KPpDm`YIW^Z`8(@vAXCC8i7vF({5%@$%k% zq(4RI?Zo}~<->HQzKFjG6}k^Ilb+RmEB)d3&9)dox#xx#RpD!oWsT})AB_Dn70mhd z4AFV){g-cdb{#)O2DO&Q=!pnUY>9K5&M5r;c28e+L8~J2T}Ei5s?Cw9A$2G{=C|pZ zdLC2UVA+b~F^s9EDT2?!Ue2!_FL77eLgRgUMAz!ph~QxXs*oQeX{i=<%R9P_!16QE ze}LHY;n(YaT7YL;MP3?W_Gls}1?}`~S)SMstFd2G+$Zv|%JdOTvz*9sSy%lMX54Ce zQLMK0Nh#XFT(yBnaF!(*n#Z79T2`3;&S+>*H8ps8pf}mZ4E8KusB@&O*-Q8 zO`M7KFqhf1<4H>M36Tkf^y-)+(vuum14s64T*~OY1 zCfQHscjof;pp+LBrz!WuCakF6HT5u?%>-jJ9rflkm^pf=K*bb*Mxku5=D@B4U55I= zpb{5~&T9n#?Y|@@Qn-&9AjJH?*%e>OO?6cND02SwCsp2qbPDchrPn=sYvwc)Be?K? z(=Uc7R^>o)qt&jIt8L^n%r;ExgMW1TW60+>IZUSZHE0sqM5Ss{d-f18Z@#|(W>_|K+8!(4V?3*OOFEyKB}RX1=*6CcN$ zh0dWo6O)wHO|(;037lHj{7ZyO4-FFLei| zTZ}CyHoA|?IKlWNb<%Z@e(eZTG38vFFkW0grUHJ=fa&1b4`ps9zib5OHGi#PzUG8J zgXxt|wRJ-sP>F6OMChNqnCZmw!&WMN)R~~P`9D{-E-8T@obk}vH(zn$b@^jjQ?8Rl zIr#A`Cg}Vk3c`CbHaX{=(`FuL6zdx@ib|eT4pZHziZU$x|i=J^SljQu3 z%)81$VX*Xha@WMxCy~wF^_m|Q!P(-M0h-*;FY7NH=(pMJtKUbp>XuK)lz%<9y-WFU zCSJmMg8shX(%sX;sUza~!nl%)46MKFj4I#kXl!)oBh%Uzg@MI_j@w1V-wSHI9$eWf zy12`EdFeN}XO01}6Q4$Xvo1nQ?Z|R`%@$G3lF1D?D>9j1ceohQ_X2ZfQl7EwT8mW; zx_L33eA!q21a(yQmgO5&;-b`i*rNoKQntJe)l6K)Wx&K9R+9WrGxVmvPbc95T%4dp zKR4dQQN9VLHX5)SaNnZqj1PNm+PZ{0^yAJ#K(@CGRA>OH)7o9{%k^D)*!gsyn7WqY zjQfrrK+c}IPN7ZknaWB*=-0llncD*tWK6vT;n$^u3-hk|+fFIxNz4_9$fn2tZ^}f^ z_n>q5>lBJ@k)VZ`cMOWze9LgN4t&yy?A-E>7L?#^F}bx{2OM>vvGe$guXQTRyjr8a z?YIfPw`cPgX%)~U=5Y-}FfV8wWw$_CYH#&*m<8w@20AMkX7NR4nJS?YE9uPXq|iaQ zx77`_fc1tBL`-CZOB$h-b9eXWPWjJYL00!qhziK7fVZeEB`}=8co%b88&6y7ODf<* z_C4&x&Uh;FLI@JolOoFL1fIym_cD;S>M`0A(}p+bn|BhTTf~@9O=MY4sD^)aEyb1* zA=C&MJwoE`f|^NxG0TEmIbD8xE|H>I$2rPO9rncrx-27-GnNLU|JtrRdMjn?C8&A{ z;bo{Xz)(Xbl=}!W`V5B1#(BDiPffep%@%7MFSdPFYEeP2e=;U_pz{R3+nS&ByfV zQs8@en>S#@VH8ApUnJhlv2DVHNsJk*O3u6XDCogr*Kn%`;SxT~R81 zIdXg((HZY58!i)Z#E$GH%-1IJ%$T7$%^20C}B26 zNVf+isBoPNg@HloMvdgoJLwqiFE;A%g%@^}>-xTRckeo|Pbu#Z-jc-{A@(2YOD!nW z$s`q2(A=TsG!9{0=X{KTCG%@P2qJbQ7jNl9}SCW*S&%6C>WHdKsr@0p)w!804?(8G1dDE{XrJIA( ze>Y-?FXEF#H|wbzYLRVL{u_Sr6`O%z4(&kx$xwP?hH-&{(Fpy*ketDEW6=sBf!p^ zU`axHCbD9UMX>v|%sa#M3J7Qul>KIX{`Hy9@PNhY` zFv;}jjl@-QQy`hKa^+`~JkmuSd!Zvtsf2G{qANmm1tMYW1b&d{2cCIAhDwA`$=};{ zCiZ&(A)S@0CFl&$GE+%RrAoic)%>|%WRY^3_}f^xV3_pqL%`mvtQA^A?LNikNDJYH{o^lWyMXZFycfD5D}c@-C_$xQ#f9bTJ zkb&sVjXUJ`kyN5yHJ*Xq~NztsKN!S&bX>BmDN0>zoq&k z`+Asoq!q*2q*~T{4OeK>6DN)h(L@us-s``)v(M<$5d@gCazWFo+FeAKiM<_&RIZl$ z6GmM2Wo`subBNaUz$oZwzG%3<%@^H#%kCZLEhqgL*-!IzC-|pD{P?D{=Y7vppAY&| zm>+>-PQVauE&eNF07hOAe?^8kOq*^ENYAhVX;lf&YU8Ib2;eLj=_CNY*iHXRBK}1Q zb3z1-vj3kJJ#*mDhSXm+3DBU|>pKsD#^9q~9VdGKwOW8dHznBP7W3*#R$yPv0O;bH zzjsQad3Ubz-e2yz%|@IT28m3`1!MI2rSJO+R1bu_@w<-Mim_O!8%`C?rbvQMR*Srd z=m4c>c8KC89kV;zi?U=rQKNbL7J(e%Iiw~_4?z@FDxy-{WG1k)8>%4 zW@Z1vqgwa5;SZo|2s1Jjs)!u#aa7qf(8w0yk$h=gdeX&Lp02y$2XylGeht1J_4Y#P zPgb2cbZ1bW`Nh%3Sg_2IJstnIS zWx)3gNawWFU$a-7jX4{mAdM2=8DH2iC{WzZ_}P1813Vtk3=R~D8Ynu!$~n#1KMzwv zyW6}IjMuF3X{#)kepqef-eU5{zFprhZl4=UTS4UK(x`JlKO#4sbFqOt2$FZUsvn}? z2xy+|@r9}vOPq5OQTmozk+gm9m_Cw$SBT;f-c-XsVPmu_yI$FUlqvxe8Ak5w`eTsY z={&@arkB%_ijIZXPx~(u8|h&;d5Wz`u!p?R#X*3jYbPsr>#stRA_4`UJfM?Ta67%e zBOORt_yPzjV^0|eK9W^wIlHe@G3LLW9DjuStNJWb!9Pfxl-cWd97R<}8%5}gJ_wMg zH;DI6$0|<~`AG})39=kLs3mGE_7TlCIx|&~a&u~C8}m}Gv_dWSviEW4-!X*uQV7&$ODB-$?{kFgu}bi40!S% zSPSMFd}qheOUQ~1R#ipdVyL<-7|z+l94#hnRy47cQp=rY&aI7m1d53?26J?e1d~qx zWHMa$lVZ8KmIBR7kW|0G#c?s0`}W}koR`JD*xvPU27CtfJ^Y+>=|0~Q>Y;w7xKNxa zNtheV8<-?r&B*LA-vGasSn>DfYsxeOA5YFE&LXQRpBUF_JGA@fv4hM20UrE=88%qw zsa?1;@#=-k|WolGJ z?E^T*@sp{MR6S4ovEAA{sEEhNHw+XF8+aHu-ICJ|j(glgC#*6y*U*R_^3U z(ly5z@-Q0a6GCytMpbDB=pfW ziO?7`V$zCfW4^E148|WZwc3rEg-4)TcFF{%WWQ4I(ouvQrT-gK!EdZoEd6Z5A)MXZ zCJ5pnaH?rdmNFAxCLYj0?O1;(S0z!mB`0Drl3QYAud6I6>(fk4_lUO8WNd z?WRk^h(*W%10;#h>$@K&rcEXaKel6L5GYcz4>e7%-d1p?ib?tW=4#i($8!b97*!VC z&Vwsx-be9LdEZEMQj-2mwv91gJn~|LI^cUrS4>W-Ui`YGKtZq>IkK)8J#fly(TqaY zX@#~#D1LMHn7lRhh%xo22T{?ryjaoo022~fV>3Eu%WXy$?)dF(eGqAK7ovP5sotox z{N+kgbCrYKyI&8p{)s}?f}l;^S2Q0Wo<65eIbT3qWyTKaN4oKm-4PdEz|=Q;M1s@L zp#xEcUeVoxkL~XCsdPQF$!zI0Ly`e~&Yq~g?c=DL6?Ir}yq6;_Ow+W*+8$_1-3FiF zEr9Ic0p*BOTi_q(;+j5im2r)08j;+g`(mW}Z^Z@DMymAwaq2+uVJNJzXB5111N>^1r}S!NwlYO`SH%72XSkX_BPo`k zG^drmN<-VrO1#nvdI)x#RMMLTcPTihH4fG=BfLN&ybzj3NvDjMfU!5ag*6UcS^P+y zE@V(7fm3b}i+ASF^ysr=@Vf{aEHDl|@H8~&9lRYA`-7G)SVu~^Vr{M+k3h>h_gamX zKQQ7y!xBB!namJ^_YDN*DkBja$9JJ8(lV>9(6Q|ZbnIuRXZU~s(K@|iMR~qZ;lXWj z5eF==q^TO}p~+KVahNI^@b4V#*thTK{poAcr-!N*^fpkj*}1Vj6Y+E?F*IYBslY+!0l!f_tulB}jqf18V+{TV4yo0+kY;pbGB-;;Z*C>w3s_w?^*B@=pUl3?c zIAAPN=C1Tq#B>3#xwAB*`X@wn*K)?|xw8_`Ey&_F+H8d3TYMp=VQj-FC~6 z^OFxbRmXp>S49ycrR@mJYe_FQ-)8bt=Vepl1oAItqUi`m=gs5`hpmV`#`Nkjbvh@e z<8p25_A#{wos`zj_(^cyiJ*jT1KGBCSgk*-{gpVj;2JYHadR}a4^~2<@N>7fffH)~ z3PmB9n)@P2!py>CVLGXifWSm2F+tkEBy{BPi}|Rzx2`S;*5@Oxi+0=tZS$I#K79WR zX(fm#WzU4YXj>yv7gHZMKtF$p%#t8+6xdjN!QG!H2-~&wHw^JMgn6~$rIpx7xLxZ$ zj~K*!TKa_Za1i7j)bxUJ0*o)f&yk#fqoy{DCzQT+2nVpKYD)m!{OwE;eNv5Cpr;0?Kpp;~nf; zoeWitdEfJ@5|<<8iHH9PcGc1r^zQVXhGh1(bVq!9YwgJnxcwwfwP`L`e@& zK`KaQOSY0`gcS-=a4H;t@9&>?e z*+7Bf^0_UXhgXw9dp-PW`Y_}TolF^yvSS*v6qf;#`QLCtBv+ERfuvt5?vS#gXSWd} zpZSv28}OPD2D%z+?8(7QW>aKUWL1MN=Jlx?dypfd0go18Z~>OcqUBIA&S5r^0)%>J zMSkvrzpBq+iIXm9*A+pxgx9NIrBnq*zbRRca;QC|aa3q*7c9UucIQQ*}i~~g2WD=a@*p}Z0C61_u)t0-IzN-v^>JIc=a~AhK(LZlG zmeXMxF+A6KHrZkON@)h#gt0v4zh|a zDj8rFjwW7Os+m%9n28&60Mfvcd5<(TAk-4-7=S%Gv@suVdsZ2xtYpHyU$+lU=n&?T z4N<1HV&BOg#mRC_?4XCC7|La0{}5#hYI4P6d{09qC(O3pg031f3TFfEQ09VF46o)n zS?30-W(;`BH}wk;u_5((=OdaL!?KZ$Tw46{l<4sxaX_vVeGJ0%V3`rQ2&d@vO=JDj z;Il-aF=g`BefCX8V)5orsSQzH$%&)Yp9myT4sY)BN;(5&VKsN=zlc4Pf1fU`*!FBu z`-^0ky;)(4{cztVaib;dRZiwN?FV{BJus9%cAD%$$rE>Csx|I6ofe_AY+8kphx|-! z^Beb;SK)jYZi|N*Iw1_gZsu>fzG=pcZY$qz=$QZ|(#SJE7aK|Z{zT+c_#Amc$ty|) zRdwIdxq*uGi#)hYC2$tpe^s=AG)~nsPDJ<1+*6Une$jSE#nW8GDi5<{`zPl6#f|Q3 zN)IkMNET1vGfOH(!%N}Pk#ehw;i@-0cx6X7cJC*h1KYEc_%&(#NlaF}Kmn05FybG<5=vozb(lMJ)10%qGi958b zGfj*+cFraFb$F^!naVz#Xrf)6nqq3y?T49Ce^Jl^kG zjW*GK22reaVFWQYGV!n|K1>K(cTc&dxub-CRS@UQ0tCoAhi)K{&e3lkA>o{5kFTPU zV&hyaF>(VIvwjhwXzSWlQIR1D6-1-dbej|aSd(l=?^3JSh6M*rE1%nl&)Huu+|6syTT0#+Alqog zPz~QkI89Bi;t`%A(LEew)**Z*73?yNnQ|ARqVZ)>GIDiDv+{suTdBiljpSKs1woWw z13!f0P>InOQZdilCDAE!=U*at6d|UDdoGxSdbd@ z@Mpwamb949;d6{5*s=fY5;`FZ>@~1T-8d{h`k_F z4)%}#3#?aHlB@58HT?7chRRoh3aTz{hTG-$;1Qbfm@qELieU(9g8hR$%9Bhb%QYg; zwEB}&9fV#HacWt3Z5PQSIoBh`({@86ewHnN%4j|orR8_*9daOu^9Qm=Jm#GcO+N@4 zOf~hZRCno*Ur)v@N1BOT=%n|Pk9H%!D<%l6AX7tJR{1E8$5i;x2t5Y^)NM=esWweS z6uq{HJ`WZJRJCXz&Brhtx9b2@(|pY~ENtuA`^iCz)t~cjhHW5q<*XaqOHHp>Por$l zneJK$I@HLEiMTronbXA>s-v=f;S)uA`IQZ#+`I*M_`QKawV?@(D9#T@)%HBWA7D$%m1cL9JgvcAr zB<9VU%}GoYJzuy9VzAe+Z%b$(5R9vPz(jZuTw`wl2Y!XB*o%UGIX=qMg)g~Vml1|s zj$MW?k&xMDgP0Q~mV$FSj2Q{PNq_MLTvk(Fu@h#IflSJq3%}*kns}Kt?PXF!lIoEg zY{=1gn5BuH4JbI|&$k{h;obg)xv{6-3WYuv_AL(8%J`+8stsAR(GJ2LyEKE)(E4R_ z4SDDm@P$?p>>1V6UI;T6gJ(n9CoxsrJBj`NAI!zgd)Y{i*Q2&Hb=RhN+^xu5EWV z<}VQ{dFzeq*AY-3AV7F^Dm#SuwxNgHyFEmR^OFHGzy<1%Z$b2@a<;X2Ea^a8nL;vt zuwrQ6ok{5w{TSJziK?SIs=fK{c9dQ)dBK2?&8v zb4a7v;V7SKlohc02F{zDQ434=@_3Ts*^CKT0?wo1z+)6GT2`j&uBB9n?IZ!_R&dhI zzcryylnT(88{uiqjAk30CAfkA@8}R_KyfTaUYVxkwXM|^Bw3hruyAHHa;Qd;3t~h} z+ypaEwemSrA0u(!Q;M}$+#X73XX4M?l!G%R&fElJHKmUgH6YZg+Dtyj1O6>@xXO9t zrkiODB zRE%+$pXiW~8Kim2&}3T^#M6049C@^@$_6myROyFtaJ0$s0vPc!DDOt6@h9BUPQB6V zyPWJG&&Mqj$k#w!PPVtwXL~rk4ZbuXGDeFarP$+S;vF&b5{@ z`DK`fmq&`j=fGuVW{#a=oKWVh&~Ey3Pt6kI0~d#oWs6RJW8Ra{Mmv^NEehFf zT@?EhlJE<0vN_>`^;il5vsIjLp@$kx;cO3LYo9__i*GUwkSEULD2fZbGw_r;h(jKQ zqJ-Xn{HDCgo>EV#M_#wWpDD@yUx6e|j44?ld!UHhSES=9G4EJkxk^xee&H*1yh73a z8qG-QH75^{0@CBI2;-dviwLcF4D570@F^e`$}|xq{jWR0|NrXC_Jc@$Z!?pgcEo-u zM5E@x6@ad3=LR7bCOi5)Y)|EC=%tc_OeZ0|x%Mpd*wm7koH$Zl;ye)CwYkknYkLu;{Q;-j{=}{ypLNiX@QX1`ombm0|2!9}QkYvH< zv54gi+q&pV$vrhU>Id{6kq3Tl|68NQ+Zo~f?ZJ6Ze_!GZ^on05e!9Di}x>Uyr zj5+mb>j@)(LO8SZ_d#YP+y%&J+8{F!oGr?o#fcLKF;VbGZNxk$bPzMLF(DU|K`CPm zIa3h#(vN9p*%w$IdBl5@_nlVA6N@vIxgp%MaX9;sm^Tk*YUyEuZ|I7yySa!OH4Eh- zH;u^ru+5+9Q5%u{$vwGlX^TgO-li#$59{J&38$j^(-mLRy;lEz?0M}|#%~g6_%83T zOF}3!cAPgQdmm%xasJds*8RAvXhOAvr}_=N=G#v$`?PD{?75O(@+rp#^_WJPh=|N; zdb`3^gWR)qy`{;LRjlgRTRHk@#Cr4$ULkoSJi9Rd<^m^b-xK7friMpeNasw0>JWQO zj9FA*n#>zrUsI3i#l4snHD+#aO_)$wLFE_?C|4$^Cz9r(YGnofMAZ*xHso3SiE!he zPs*Jd)!L)?W$|llqMvB<+uH6&+*fnvX*N9@(Uw8&4SBdMjwp*0Ckmh_`k3Ihro&Zp zJ0Q?N?o7F7%mzigPCT$-{;@gPabg?vgsG6Kj=os#F#JGF5zn`VwqkTq)LW)uszH|a zdOypohW*ulP};y#TdL-rNs`bmVACi8%5#7VMv1b3t#;8UkIT7MqvQLw1HNw-S529K z9@F8#xQA-PM@_o#{lF*GP^!Y8&EoEDuBKGY?Vd*sG8Jx`oAX$OXnu(DLVx_FlorO_ zKd24Oaf zeV1H6^2#JN%v^5mPJf-;w^x6pjdBEg7=e6x|gF0AcWl!50vPcsq&`GO+sYn06G z03|)wcZjm)pSTQHvbn&Rr;suM3;b`O=5_!k5U&)p8njh(=TPd zuGH5d`M=dvTn%OWf#~cO9svpuq^yUAX_)&<5kkYiZ0pI8iHFhtEoiCG42hPl%d-hf z#-!vJ5=(AJ5ZN@eY>U3Pv(@QF{4yu;^G+->{VaXo=p|yP5c=F2H=4)7sErx3l%5S6GA0^o)zy?cAy3^m>e|0Zeyu$!#8Yxw< z43d33?kyij-ctNXD~br_`xxR(l^cNk1Grl>-=6)~4?TcX%BXk*QD}PT5C^XCM1ym$ z*D9VomnHY6AfQ2&w?5;vnZ^kvp2)Ld5X8c11S8g^-=u%Abag^l9=4VvKFm_>{Zb*1hu#ux@@s!k<fAu!ZB!>T}W>KELzc(*hh(KtqS@G7F5}5Hl1{<9HyYxhd$7h$C1x7l!t?9jB_% zo`l0gePEmL3gjSJDZ@UThCKZoL%)80%~-zFh^(ynmSuh07vl_A|aA9Qyr0Q`*bjbmy+TP2tTuWb5q3 z=Qr-hNTj36J5Pq5l$4re{BF+=A-t@1P1ImkZu#9TMe9uLIc%^z zKR(92CX*y7s3+K&LvpALeo5`!-)TN;)>Z`%P>B1|XUa23Bnl1EvA6TnlYnxqLmD}* zt&fBvq1cpC!(^9DNth!0zZFTp6e#xdCZci=>PS{`x{A#gwnhE>WT#VH$4o|Xv^mjq zIT$3$ZkHf_oY7ThFZEiPHoQ-R2X*)i4<2$kDUEXPpFofKgBdYj-}4&0=ZlUgcRRq$ zKPWQREj7iyxwmmr6ny`!=};LOUK1 zI&URkh@KpOvjMWbc0CQ3+d}nPT&qU@(Tl--Lu&7uUxq}B>%6Zk4`#{g_0Ris!sLV@cs7e=YDjwerycuFdP8}cYP%!M=AbM{s+_UG~VuBE6E zHr-aRqow!rAP@e$rzZ?-&Qu}2LbW09`8oITNVEYmP+s3=^x5>Oy$!Ex9m6Qil_Tm{ zLegXO>Yi(!s!4HFY5q{@Hm?nU4l}Q#>W|Xp6eZmw;}q-bQ?FQ|-wNB9{FcO~d*GC- z#ZdxI?!kYI0RVDu5Bp*eU{+I3Fdiz@wnsNXWJqdt`CZ&B+=elqKLT#+*I?an`WLX3 z>`=0Ne^y}sodpn7cnm!L9YSPb=(oIY-bd$Xq@Z1UBTSa%f5qfHIt9xN(iV{6@T~7b zc^G!|9j5~tyr3nsK(Le~i4S4C-5%F+7|jVLI3c3*{mr{m+w-PB??F|Mm*J*!r!={% z#WTKVS=q1nb-AXhTdO^4dzYb`fWn)KbpsbHBsrcByj=b!r>G-Hb7Re zAaJrdf9mNFpF@t>T<1ZZOXtSSC_eqDUJEhw3C>XiX?)=nf>N70&9SLsWPG`sRzSa% zYBXTxDm(dn5}!u69G!i54duC_QX#d4H$XNJqYd*fsMh_PmwBii82rEi#*r_9 z(MkOH!Xr=sq|H*!-(aBEP}bF(lQzS5sfW>%?dEW2wirQJ?4%yPlAPX%&$QJ%`I{VF zh|Ows-rKUhTF#X1l&M|%B%L(93=eVjwEZzAQeg?1){XZcHTol6cbk&HCzpIaKUqMf zHvWEOO?4{D-(pKqYOk_;WNom|u2awU6Z@e(+!jT=q0@^`BafZZ6Hz_3#5=B&74IJs zWOhZHs+G*t?ZvsVDRr#ZKQ!I)*y|RhdAEEOuj+<}6QOP+RBoU})=`n+DP6aD;+ZIP zc^wy$VZ+_}>0w*i-MF-6r2a+dfwWuI=Y7)g{CcapJZ&RBnBTVFIvbF@>%>{}4f9$Q zTaF4>tBjTU#2Mx-F7xZtyN01w3)TLRD;(kX1DpZB2V6+#KD+YuBG=i~{l$au8p_~6nUtF4195>qQxMvn zH%3Vh72!A;wFfa>%ChN8^T0U9(+ycWtSMnU(7j~yqp0uf`a*gTL*ftL&VNCk8pz#DU!Up%{J% z0~hyEsO!iFJkT{)k7bId_+?!+1bj7sJW${>@H%s4cu-&3>sp32K^;upu zWeR$(uGGEQiXVqw>dI)R7ItDQWn zm1^y+_L*}Vd+muKxrMKz6yv|nr(l$$$}9yXRy$l1U*z^dO(|a(cQtf@L=8U^7Hcb~ zTS0X-W%{7v91ufBf$-i87u|m$#rM^9EjZ!s@u6W{!; zCwP-f5d9aOG+(~taU3gjBP@*?qD}>I1B-n=Mt%;gRYWum7qSDvy6XQVe zNt&$Y*DkrwB9;B(aNV>a30#rEladADN{jlK&%F`|4lPTepuvTy^U z`1;4uywp?g!aNtB5aqpA4evDHv}98gSSqKVXu2>08o7UkYx6;(tY+P~ua#W{^OvF6&5*7DnwZucdo>d0U zuS8)Zx~PPaiQwV6l`O_(R0zd;dODtQ_de#ur&x>9?HIu@<- z_(8eSsF?*!nxy!p6|nv}tRU%<#VCj-L?c}n0l2jR=GKLCBU z9L}g&E9S*M3_KygjPmGhOtA&M7PbteaOPR_OL#I|*JCrfCZ>sEkAKL1^|u!fb8L*q z4&^o~QfO!?LVTC5fNn1hx+69QGb@(R2!fv(DsZx$s|&*!T=MP~Rg^M!YP~9;_=3_l za?W1gmJU#XYF<$NJVAenOG+XK`V34_E*RvJlulzC2!yf5#dpS03 zM!T66JDQ??!65!Ni!v+ZIkj$t8+^GZ@(6?<9mVGhBKVwn=7>v_LMWQ>$P4n22VY1M zHbuQ3F0Or`9iT9!01dQ(CEx-y3Kz;vr8A|d_K+rS6w~x14R;sZmVe^}-b)}nlLYcN zPPiorbF}c#7fr2}%zo>q+=ziU{BOKEH7lXDt@)~-oikMWn1+yK`W{ut4PTKMm~t3p1MP{2lokNe+kNota>)hJA6%lleq=U6| zq|v()ewvL;cm+JQl7yXR#C`^Gw88f*-AXI^gZAz-zO%z>&0|$}RAko3y`nRG|GbZ& z0=s_mniq>UxnK>E@6&%B>qMwp6M2x7+<6acR)lj)TQTKf_#JBNj0H3H`~~FaH+SHt z&}l32OJj*B>9O|qOGKc8_&-dY3s}tA|Hps3tk$BjZq-u5FT{$GkZv;w!@3OG-L~yA zNQOx2;Aic4F!m1j$VsRH?;x#hk;^6?5Pe7 zq6a5{T4bb4u6?1Y^6-{dR*~V`fr!W6M<+ouz&|D4Wc#q=P*GBmw}^P(CAA zdTTXU`J}4$^h%k}psTb2@m~%oEJu{(LF?5Y$odt88+cgM*!`Vo2BwNgDIBFd zj~g|#vO>Gci^YNzKU2YMDc$glvhIRM^*tJ^s*^D_KSSZhz6>e6IAT80cf^JZ_-AwF zo!e4Z?;L`8$0b?Jsx7u=ugj2_(I!kJ&5`#93;Wc_%1N#?V}_bDFMO84}pPA($QyH*g#RqLlhx!`K7gZGijn?E}&V!g8^ zBi;_rSTyOXuM@I|`p zj1_ zC{d6*sK>m)x*<l0WQOo(m0; z{vkDgM1SY3C%kcq<5f_E3OzkZl#VHUSLEw0IAAKt9PsMEIwHfo_sIkLU~@j=X+%Rin+3}6TrX}+h= zJGe0No&{%RuiL$1N#RJ&JhvlBq}(2-6PGjxcB(OJw<(c($!4^EX-A+NGyLwcehH&1 zeo>;-z;a1}VqD8a{>Hl(Ht)AyX`C=|+78?D!>e0X*adc5>s64CSCQyXT@t`=PR@&n zziF{CU4hLbob0@AplUKEXykHOB(_KQcpeewG`P-Jya?Gh)guO!2Qrq)r!UI?Y;Qpv zxO8Z)aH&fZw#@KwLhBKSmYG~vFRfRys!sPHK3wspt<#$n)FLo_D995yeQP^Y#`&pH z`N9DFMXM^QJi~}_{xYEwoE6B2PVWSDwxRD^%yjHoFes+$kO0n4q7+dz1`lGoxkgzC zRHA_Yg&s#(^}IRI?6GmxVSsp!l4tnNFBJopy;rySqTy_SI}BK+u~mZrX5R}Sx*_A= zq@^IkA0I*vdM@nrOKcdueq}OFx2!sJ%Mrt!YJ7}MFybI2NOsxD&t?CP#(cT~vbT9l zF-I^;;M?d|knh-SwJ+|-sZEJq z#@4fw(G>@7mQ390pZsx|d(1Uk$p8+bSf`^Emjv+Wy#OS_aHdjq3q8EBx{0?c3@zu*AH z>oFm=GK1OJGXw|3Zi{`VHur;7-P8I7%{CKQ8&wt^DmCzn$;5*+VkJFxDo)3EMx^*M z^ZF=9rT@?j;L4u=VNd2ABKk1!M5`5@2k};|NI&my&_Idp1@hCtdgv4ITO2OLM$Hx- zX-efXnBq2nbh7p+qK+$-yC+yywMA$MG#GJ-PGev@o3o8-3xZbjYQjx#4x@WB8~N@{lP9=LOk; zz5DDFxpQxuO>6@1n3FMk4*7KeKjaoM@ZeypD(w!v4lrr_r54HxL8R{GB!D;BPa$jy z@Hg9dTX^(em4CP@Z8xR;vg@I(fTJB*?=8yL`U&J8Dsv7ZEf`bo%*W?gX-Y6IMvjT_ z;!G{rqd_lB2In~)7;Bw~(?aYzKhcabpB_3mQ2*a(YCnP_Y%yE)^i3evmgzLSe_JH~ zzH+erJpf`G8v?vGiZe>@k=mCIPE>;*gl=y;G+4z9VGCRs#Ucp)MNizf-^vNFX^5pP z!)z%iYOf^rO$;i;1}%slhb6)M2;}oRE8UOO$*#mECnxJ10l8c8DK!G#7h^<1`X36g z>sMZW44!M(Yas}dTy}b+OWY>X1suzb5i`Sfm}#u=cf7#rqE(9*BM)snQ$prC^+8fI zv$X%}kXL0AN3oa~B-`~Da_riaiodMc60ZqPBvX(6%*vDu(!>~SdOWAv>dTaTx{Xtx zs9dqgYhUrz&+(Y049g_QtIsMAeNXoXq^bKR8uEN;y+tA|lQXmdvn9Xmluvj?zOaf| zi4&`Pb3UX?N6LDyYO)OCclWvBhJ`VQ0dM3ZwME;_f`J@MSH_9;+H9Y>4Hi6D3+OXa z$qC}dlYh)rxQbFyIiGJ1B>t>SKmm&(!r|`f5)ti?~ z^lVsBH^p6|a~9@deJ3A_B5o3W4?h0p1jroSyi&e6-e71<+w8!*erD%>5DiUk??0IA2FMw{-#q-XW5pi9TqE1x$FMIfmceoL)hN!RV+e^C6;$@F&> ze<<^~-#}PkPafq~Vd=cCweZi;BpwUajbzXH)zDNWk3MfHL)rHJ^9MVg|9jN)W-SDSMFO zOC_*A_d`8F$uG^kwF?u1B=Ixyf3`#pm{z353BsE`o4&+X+{j?3+;7#j(u_Zl<^9*) zSls08lIGE{rI~GEU$w5UXf%{KnpRI-lyK|xXSr(85{j|yKVTC};O9Cn3hKKt%bR6R zb^UGEM#|hzMekiz4t7D)OFkDFKYW$9T9ui7@`yX_pi%Uwt#cVSu=m@y#u5wS4#g=U zV}P0$aY=Su4Ay=AG~%ZFjy(^T*{A2{Li{@daZ&bhmMiKp|knG8h<)(`~@DrP|e&mI4fg#e1^=P$5sYL9;(sykPCj*@$& zOnDoy+yw@6%`e(akgUoo7FY16M{1@;xV9#50Lmo5AsOVR6g(={UNyb>H}nl!6qJKg zgB6P_1sT?rGM0mfXh1<>af!{)h-sR6r&ItLp*60b0*^0+DeIUbtVFIH@F~<|?&Njq z8&DOozeUyAfbC#KHsl~5cg|%`XZ8JwG=j9Z{}k2NkjkD$v^h~Ur?q-x|8$w_ExL{I zRS|Fj^|oZ!eSd4%l$jk8J%z}wxwpMtlJ=Z60!O{x3SDZOYJIBc#nRPN6HX0siP;;i zEf4JQs^!j;dk9xX+6IueP>H{(X)!L}!J`f0Lvg9PZ}z^nxX%+7%@L=4U+#J?KKc1g zDGGKFa#cmPW%I9G&2QP;UDifSQ`b^kixvb?;D^L{!Aw?f_qB^&d=03g4IxZ}cU5E} z?^2@D%*^r@ME*3He9%AJpi#r(!>!ii3^v}UzSHpqRqN8huaza;LL7FiJ79ZM% zwY)*Pg#{iiG8N4n)?DX#xAZPDul&$xA*frKjWWOxy}?ixC!#8P__wa@H$gZ=6xv8X z0e@~0F|=F{8V~CH@m$2?HG*(C8=?N9kfMcStPz;8bE4!YT7CoMmLLU$98P=&ZT_A$ z1>SKwEZfWzXj~3Vm9MDH9=JW81a}dFlDl{UBpb651&*vnt0F=0!hon3c*PUzuQUWUpgQXFM=7uYJMy9N(3 z&*#!JK+^+>K(q^{kQZjD@t=02t3ew7P~CTiYGck+I-N)<<{101M->(5>LcrZni{uf z^{g!!x676|yy00MwASCbb(t*g%dsR7f>O$B%ZY1WB&PIFc|%*ehfkkcwV14lf3*Rt zU?e|hcX_`ix$Y{uJiuIDw=JfIVdx7Vl1$^EB$9+^=cH_uzA%jJ;nIw@0yKaaY8Rd3 zsW9pEjX z!7>KimI%xyXif~k^RqzaNIeV+Nx-mowpXWvad906nuHYm1g#b28IEkW9FVD%1B35Y zd^*@c0e+ic1fX~bTL8yq&KYkD`%L`>Z3pl+shtvuJs({U$UaIG5cmL9c@q++KbqQ3 z34Brz^#y%`AFz3`XRtG7=7EV{vSk$LXs7a>XRWB6*3r7tvA=p-*8^q?F$2&iLMZiX(!#qM|I#FStkdXJBBv_D%9L^a z_){Au(n1WZHcHk4ToB0=Sy$8C7vu;NDY`_S<3h@v)y5%n=%SgJ_v!Fg;{RAT7wvxE zduLtL&&29!lk&Di1?`AAeb{*t(X`}9HaL)v5OJL=pDS2f@k7~-M@UM4Gqp9Q zy)%Sp$nl7--eqfYDq|Zv=Mp&)7sDgucu(}m`v311pjJ2jzW?hWPik@+w=XSEf zg*hXBv|>M+(j4~2glW9^1I%ep@q%k0d<1HWoC+e!pUVd_+W(Ry#f11N?gmz6qigyP6}kraagd?WWqXXJUtipP(*tigLuZxSV;u|Kt=P(Aj=}YN%6RYm@R*h@pi7 z53psW*r04oku`4Zz}qLk0k%O>P~G@uw+ve(P`56@ewS6%iQYoB6lu1$Q+NxGsJx;< z@BBa14&;iJQ-N|KIbaL{@I|+g-+-t{$O^)vqLG~^u>1oI_QX9u>uJArs`SBlxSJUL z(p(s+NZ`G)Yo{!CPlbrrJH?z4hR471{;G87M{ISI`43j3?xKblwn5gHQAar{_tG1# z$0$_}u-O>mH+AS(kvx8p@QQX1)#}CP$6L+*4h$n`}a@Xm~N~m33ULTjnC%k%BPgMN4}fGe{XysSPS?;jM2zj@ol?D zZd1$)5YpEjsd-Jx(>%?1IjVc$WtMdobAI~vY9bA>BnBQ9=S*`FDJy_m{s>JoM&Zd! zvjQc8JS}ME1h>IhWZlGxjaw#YlP6ieK$N- zL1e>MZN`x7eZ=*ZbRUm1o?0us5?nF8*ESufYQU+CN6l~V??K}rN6f8oqX<*UW5E;A zwXN%?AfV_Ewi3<>UB$Lwd^ZFRZ<_pAZDAL<|FCh1r~#YT519~s5tqq25Ue+~>v`n9 z71$;#!s;d^(fgfpovw%zbOIp^C6YuDd|A=oO|EBo86`}&&rN80Uk1qMy|%^X$|C2r zE3D;R<=9o-1Hp`w(}*5+)usx;0ApUjbmT(FwE-^8R=v_H*oG^3eln$B>ENI>UnG9- zH0gHSnmL+m^7-wyLgVo?_m{-vWDkPeWBMYDI(ur~ilG~JPE3{|O;xG7l~yq8@_Q4= zdh95>B6pJe`?ioGd%F(ZIzLrARTlo|J$tYAqC`>xqTb`SCBUy*k?~9v8oi)4Q?PbZ zOd&_Sxc6Z^wG}vSCz5(UoJsyP8qb4MBd2o2pvbSJmp4sHg$^K{1?9Pj(yn~PpmX)h zAbJs&j|Iy|u^xF_#E?ix(QiZ*=Q5L_LvUOs`6Q|UwFT2BJV;_cBsZ0+0*q9E+{*3n zs)L#WTpu0AsE{b^46$!)Du-YslLGztzwj8>+~YNSe3Wo{!;XHC(pShnDTx6bm=H zAC_sc0J^_Opgh!7tn$AOYKe7>T)K_PzhHnW^{0S1r!#z4YR$ZlRxit~Xp0YKN>d2Z z5JRpvtLg5sp>K(itzBgbR$qi?#ByABhuYEuMmBVnCQzD)XujX5NLUHDx)sP;6S@L? z_`c|=(wov(yzNF=57iCI5@4AkANUSW=hx+q)0F$^FI@0uookTl`${7Bd&{oYcZ@ku z#$s0t*O+$gx(#xbne-c!SJZw7Rp#^aPTD)--73ZY34^ynadCtpa9s4lBXrJZWit{K z-yvBp_#y|^9Qu7Fl`gLfgIcZ2!xB})*g4TBtKsvwIP#zH78Ei5ds|I7Fd?W)ofok^ z151TQH9QVlF9p4Rvjgjyk-Y1V=WkWop5)7zGbA2XQ%tEv8caMAW0gZW&2@V!cfPx# z3Nyzu@Iu*(cPYww74cj*X+<{hDUx3?Xy2L%E$VXn1ysKn^T+t)h*4%m{Te4mfUEW_ z&+>4WpB245N%MQ2p~dSc(4n&r9CoO>?=`aFKnsl+RI{T!8TtPB0%#&@Lgl(ThHRzq zPw~;9t$_<+P+#X46gp6jKTXrzc{fKu#&yoFTPV=_4MlQd0BNCc?nc!2wTH3d#w-ig zpYsZ!{{6{{V<0<`?p!*2v;P}`iRI!h9OYWDCI?)&qd7x2yGpKDe^?MsK7iRmEne); zX0$B)EoitZi8Xaj+9e_pRyfk*Lx#Z_>L)Y7RfZLCAn+Rz5k(H*?kzpHXU-AAPg_N4 zSTXDpRYv}F7b!eiZxrWNgSF_B0j{s@o9jt+R9P8zOXmu0tJf}CZS)l3>SEqOvco(%zin zsIrM)OeS5SoQ$)!l0DZP*x~w<$$ z>Y?*T$kXQt&QnGFinEe9Ka~#Udgp_*rFGqXGk1Vd{b?d`L&^F~aRzW+7vTd}vw&LR zFg?ZV_;khX4|u)sU#(IY?w~c=f?PL_QZ-=`{x)eB;ed`|sQR;d7pp%OrOC1|+Kz#K zHC$ZIWps#cnAgBThLX$EWt73kQ2K}Z<>Zq`ytJTn-`b(1TnOIb*Vaiaceu}=bbO{@ z?QOe$t!Dw{<^0-@zpMLpi;&dId^eWaI6+3VU#u;xXD#>;>UUtP%e085#~&7)7lzHN z`mn*)_UJ~_{FahUE$JU@b2b%T-_(XwQp$b!@|iqxYr48&PSPduGr&holiq&g)gIoo zew!?00Mrui#j6VjD4S?IPOP5^^;<*~Qsk0MlRuV;IPmf#mUGYfvBH<W)FVZ{dYa61*#6^WLnR8nC75%@R%3+u&=Xib4P@0U~(#Kp*(<&@>$VR^lbs0PD zx}5Q{0Z24;%SXb1P=TS+&$iz`n+oPOjyQcQ1t|#qih~p`pZXOAWi0%^%$W&J?SOq|`7~%OTaI2l$D}8xu69GM8mt4F{_jfG^K&&jhFa()}=9lGHnOw~D#=}@C3Rnft7Ahr&UN38=v<|K^=Gqpro)3-6ve};4<5~{d zgUKND00n3SjbghiAB>Q%J(yB}2rorr+K4Pt*3wkxj^eMrS7Wi6OU*F_g{u5aO6{ai8~fppGsZL09*U10P9RlEJ%A022w2)tUShGy zyc$Yg#&M~Oey#5oATx4^-M81M2TEX|{RQ~!*!TrChV=rA+SGTka!OB!8Z%6a+$#}? z;tLD)pSh|e&LNm!6AtS4=E@R3(G|(nwYnqpCK_d63xORWp=zY{$Lc69m#5fx?Vo=>Zx4Iv z55IUVn@l{2rCx{NSKI#_oMiwWK$_1`4rK1HjHmy;RjzaR|W3edn7+LaY@UxUMvtuK>pKqK~--5@t8Fo}Yj z_NZ*|u*39q#4gGA1Hc=jSMYCt%P>_b837O(_xnk+$7s_$!l^48pbY_{J^#Z*p1^;( zS_L-zPjA~UawIk*-ngS+fN|Cn@9{d%mJh5w<9>qAg#ahY)#RJSkQq&jRyeB!kfW;6 ztna8iE`nkb^72#@)vyzjdJOGw2|c0N%>~`PlW0li@vd@b4Kes)w&i^9wcp^ozdKXV5j(_tg}A-*oePp@dag_;aJN?7^`C zwMV(d%#LkO>w(c+_%ji1Om-LPF$Ro5qI$FytIZi%4lZL=ywYA~DhR@vrrBWS;Dm^p zVu*voK<`nhvps3<6ucEA2%eDeNZJ$)Cxv zU?E6N${CzlL{8SWr%WsaK5m5t@rrtVsU%Y>qb}lt(^lB`9Brwn=NRVBimrT?!IFe` z`Eh|Lo_AdPR#&SmxiB*%4`k6*ulR?z*X%j9`928HGgFogv>Z+<!?#}l3tw^uA_e&dN%wG->cOPxJKU1-r0_3pFC#Qg5J5z?o)JPhyS}4AYZ&I;*r`( z#pOB5QbXTF89{MR_$l5kh-r`nca?|ujiKn2$momTW8e?=4+zA)wSbA^qN5EBj{<0?CuU`{nge^Tv%X+$AhRwP^x z400NP>-TaL2R~E~aRwmHePZZ)qgjLSI%dvQvAWR-;NHuJkC$Mv>=4`)1ziZ<&CH}U zabC^Is*RRP1i|qV*)!^=nM$LPrm{%?{bxAbnA*j|0l*L%-cK=k&Vu}9-{eqLP5B$Z zk!eK+R(<~Z*owUOz_(8P&ubJRLXrbK$be@?flV!IxA$IZH*L=Ns_PB`pRmDTxx4#(?) zZJCCJ-vAJB$E*sbrKHxF1Mx5pOD1H-@r2=xY=;rNKD{Jm08>o5o4 z_qWFED8?))oPKrVIF4)=LBEb2ODe<8*~CP&H{g1?f90}>#8cd#M=w}Q$~w9O(l86%y$)BtG!BpilK#(+YqyIt+`S# zz|8Ce(V?l5YN0FE5!*?c(-s*33`6ywl>>rN%uyKf9dQa;f<^O%7+|N&pj~{lMbG4L zC`QoX2eM>lC3J${u1&ZcpuDx8mFH24TWRT?SfY^I09QdulU z2L=O`oTXUTlpg^j`;votK;+-YzH2;Ez`s7hP@5;fr}W8L==1;d+}HleoXS_{JvKH`EaLIa&p1jq|S@oH?_gdIrB=i3lw+nNcp<}D6;dG zUF6w3vT1>e=~~tOJ<(TX)2jMd_Njt$P2qMyU>E_mZ)+EAT1pv8r1`OG61f?ny$f>} z!3XMeJBs3azM}j76kKWHtE*|gL!z)s;0P>ha1UOpaJ$Iu}Ca<0H z2y8xx(JWQ-oIm`C8NLrohy2lJV6j}kf(P>djt8*j90>7hDMmXS(Re%e&DH2bt)Je^ z5Pe1XfRyK#A9FeRrTh?1ICI=9iG1a_qu>jk$PhG1I*ZNiVMyqM$#5(zEgS7M5(uZs z)kQO0wlWoh@NYacfH2v-%d`K_q11{8z@AGm`hh@@GZmzhi_sN~*skpDMYiBsSKQ7B zH7>oV*fVM=aI({`|8TJfeDvqZ)#TREA%lZPW*|&4SXIBheRB=)kK(=E_T?n&D{511 zk~aAD_VyWB0YrKKKJO9!ub>kFp!5F2SuAu>+RHwloQS*2pGPou*qpc_xI|Vd#7l%d zWut%5{Mf0IU#_njo_9}KGE?AmSe-O*%{oVzNB339@+l`l`jCrR63Hhvj;JIzitPH8 z!0)L5P*^@W&u>k8t6RB6RMLr+U^%6adFF#)6+za$^Yxd4&5)5>2-9RTUBHk6yr`R5 zbfX|d&o4|lZU#xR2&EEFx3T&dyYe2HYJCe813ijD`?0PCG>sT)`xafuJk_FKUx3p)FTGiF_>_mam zaBSYe`MUcPNA%D{@H^9MXNQ-z$11fgT3hDq@|>;BrgiAM+)0XD@=v<^4Nsaz zGA&Gx=Z3ykdi!7aCP%%lHs@_m0d@=#Vhls|l00%PkTI~JuQ3Za{%vNC z#w5{kMUIbKS;J=rA>(%?62Ch^-b_Dw- zF#bL8hj13~>pE!^2QM3(7>O0JwvP9M)sqbgg=$h22r1%YHa`4fkIE=*>nCl@;(8vq zPj0ys^z>0Jg)K^?iO#!EZ6w*oAj>L#?_+C~-Hd2R)o^!fC;y&L|EED*3 zg8_(9m=HL0?Y7!p=BIdAaMBjB@tR zhLtxY?wqQHy1nPbSB`gOU&q|PMJ`uxfvZh_RBm6SCDVXzmfMoq)i2gYy3w^8bD7UL z$7=O9FfSL9aAP)vbrxq;miAI)A{`sKOrKky<0<@(-rh-S?Igcgfl-p5xg2`36J>yG*$ksW!&X5DO<>Vc>e4EnJxxXx0uqJ zRY#H**e%lB5^zniqp}bK_uOTW1h=M6kA7DnU}=@N-zux3Iz+dI{)?S^QxY-b*eZH5 z>6`E-FCr`O^qcZ28zoMLFWINL@A(eEiPeYPa~JihydO{5d({vjKc$4*SGx;6Kb!XtnZs(sAqI|ix}KHR7~2v}NH^rJt8e)(Ni%+W5OsOYiS2xwMA z*weBI$+)^U*B~^Z>B~o)r;om(?jTAzH>FhiaRsKP_rY zX7RxAG}&QColBeOs@&P3cl3dtE*#KvFl8l`q;*6Oc3c3);97fy^APp}nZ-1cOwr8g z9vT=5LBJh-2pWlYrbKw$piw?L)yq2e0s;aX2Et_BxMM=12R`ob;`w7FjJ}y zkE-+a(ri3rD=%I=AYAwCopSp#nr&)h^Iu2Z0-v*i60M~_vhMAMxm^=(67p{g<+V!I zM+fp9cD2`YMOze{SRl7A4BM;vXpdG*_hS*hqc#5P1rW^$umzsGL#G{AD>ly!JY2JP zO#OO$MS|Ps7!tYULViE`EjhpCt?o3$W|+}zA&h0C^CP zvlgqhda_kiZ_M7jqWJT6T@D`e0Zg4k9p;a1PZP~wjkm&H3@>i`c{(W+r)kC zJ?3yzk8nlTPtkzQElKp)F(3WN?56>d{68bt+8esh16{YH@yk8D9($|wk&***?*otH zq_sCsC=H@g?@*+;(Ve9@^YCS*z&fX^ zOwPQsEA(4|A!TVutMQYvjR`kNM6R-SRPxO{#pFh3m`#=p2(_sQb_koik;!u^r8O1PU3Sm_m$=$j)QwNV$GU20 z>j24_St^!+Ab#w~>T=K|eE~&7&T~RkmvN@is=#;@6=x2{4$EGRprg%Zmqu1P1nb|$ zu@`FVG+dK2mQ?4=stN=WKLvV*c+DUbF$^^iw#Rf^$0jJ(c{E-;Gg!X3MwF0Oay;h} z)I(g1kS>uj-cD9MdHj6og=>Qg!i8_vQ!OwX6$s_dQ$Do}5JL#avB>3w?n9 zg%9jrRi*J|HN{)1d_{(SCfMN^XiHbKN%orZbH+gS>BYjR*ykWMk~IU#(he=CjSOLP zgqn@w0v%{H*$)t~A%u@Wqm;ZM-024bcb=!gSgT6xr+`2NH^4k$1Omxu#$1D5f~tHQ5mLjj!IhM=J&H8y}=4!dp8sBM8ZEO`%b3pfuX z={zeaP?o?cFwEUP3nW@}#uD>Q!`x-#RdyRH-YPl10=M-yn|(4a4o-%E!IQbhNqhYh z*CRgPj0Go^&&u(v5k207t5kZtnhA#Q?tyr}HR84*mTi>>z)Xj%CoMxhQhIj``2Z9R z1QY#4uop2vs2tzRSSM<`UYz^G0DNhBOlMy`5DYFD+=lU zt^J&7L~~Mz@hDOps8X0GhA5^0;ZI)s@&ZgZBn1_b2crPnX&(BZZ_;yVfCp7$nNXH{ zI=+)-*pRav(gz8nKPkc#Bv2-R@GBT3VTZ6?|7keBcyo#m-Z8P2@-H?dYY=q*s zqHm9PV#{mG8Ga-Pa zXWhvM5&O_;l>%OzGRoxad;7AaV4`5VMN^Ty1+#;TING+(29Z45Z(fx{Gxm$2Zwl7J z3mXDAs73{u!`LoNl<#?p{r^;!2(Z^sXJ!=)JS`em-C2m5jm4vJ^s|g@W42fd(~pKZ z^Cc<1dcUi|V-r)cE}rfDh7*k^LiianGT{Qi(1DE~~ zx0+^*im^+WuGnBZU@_n<69_YzXDk(N+hdj}`>-%&+w;~*QI6{f5hxZf^_aRn^QZD; z$L-Gt*KOOs{C-&9q@u)Sp$;86>X@oQzDKP>`7EC^Ts!bXP|q^)n%}EqdT3brHO7wu zPwj%9hFyXBlEqj)=Z&%)HC8Vc!8&|V%6+1CWn>YE zYNPVU9``)+j#AR-NE}adq|~Cfh|scBKwjMwEAbT`|ICm%chie8#v6sH<0VGzroqZ0 zteXp&3Sngk>R>Lv-T~km$}&!z52_zB_`yrjS=j_{f>Nb zi^k)$8_pM$n?KCeZbFuzbD$*Ac#FQN1FXQnjeP+WXbIMjSaD{p65XPs&$Ixm>)ef& zf{w!fA3?^ij#J5K;B41}N+=c!WgoHIIjjY;fnOjkD$--ol73|eMT?eQ*59P59fU$vY^#AN3p)^hHzC!?K2BE;`~ANDuPp#Ww5KD^S3+u1?;9a zrD30O+Yediz9p>gacAx%GnO?tAA2L3N0vZ4g)FHMlIqaF%Sw~4uuAMYQfC%NSDq3^ zmrroLt2FXz^uEzm$_vV8Sgx5yreXRobOZRX`A822(Z)P}$3#+LXrU?0_?66c-^|fR zg@OQZN+gLYWnE#aLNEo(QAtM7Xe}iwd4AwI?vu--p14x|>!R~RABvi-lxo=-e)L(} zP*Y+5qCeL&Uw!+&>Yc65BFj0UQgkM54P(>?d9>p2vKF5F2&h@W1k)vKIha)ZW~;L) zfTECXC;UzMTT~}_KoK#J&}o`qMA*Zy+d5=IxW-=H9vcR49!(8UqJBnRTx80$X~V7&ObY#yC=>=tJR< z2TQra)f z0oCMSM}gy0cUbAHq(qt_2Wpl@AhM^V&=nXT^Rc?i`A3|lbk-=p(6z3Wf-c_6mAY($ z_dm~jo(O9Q>oB7sCLcZiRQJFB!2929%z+ZW(Zle}fH>tmsf<8$RZ@Wlx+?cS0Q zbx-Ltse$PV(=hb{_=~<%r}=Y!S{*ks%f~f*-=u=tDtX9{apzvoW4s2JX{DBN&{iTk zJt6X}YqVjV)OWaO5!im0UZ2C6_T?H2ZQb58ul<4gDkD$fB#gq87nMlEMgWo<3y0~+ zFQBbcJ6=LPveyDl$0d?e+HUdD>j zAwJgT1F;rj60nDlJ@ra+2PF+mh!v!Sux4{%2W1qEY~4Oa95Bbex=@H~_zPEPQIOQ> zVKmMyo)CA|p^p%gK2iEi0JfO%81~<aVfF3pYPs_vf%NOWO1`s0Hg=e$!`!s6Ca<>a;X? zgodTthRkfyKOGuWJ~7xw8TcV6?V$z_?rEq6bdy$%bdjx1ibqP`ajtm=c6?-RSEjZ+41gKdPZG%M7+G$tMar9t2CtP%YU z@$FI}rAJ6_Mgd{(xW3ZN-~22Q-125CGwaWsRRuR{#z|!os3~N_L8j^ucF<0+Ee#Mu z?#-;do(lDWySD?Y_+Mza+gWZ8z0R1z>Q7>`-)5`0NLE}jRZH+4E~S#A2$<)nGBP}u zBM1L&kCxbBf%Afc>pRLl^%P~Z0vu42SPV6}8`_CJD^(PrSDv_-#r`9iRyF0PfBre` zviX;rxt{wPd+zk?7f9cKdsXjf+`Y2*b6g+oj^=1nPdMr*6PZpCx*TU%x5SW|x{GsJ z(&H>4R8`m=OY%ma^qc|@>%$_hnZ1+D(zl5iJB@Wu^!92`uN|f7F>n3lKD7$B3P)q7 z0QKy}?!MjO$9aoo4pGLWtkBzF;g9GcsF^;>M|_v1VX4@K?Ag%p1FRNezWogqMI`nM zW_u?(w47D4?ATbP%^;Gjr}c>Z80=j}tc$J^8I;8@;V@N>0r!7-1|^)Md5E0vqs>JJ zbu=AebT>l%<=LP2(012nzx@n_3GQe844z~kD2%=b@%`U8(qZt`xfC@q>qLgD%~YMh z`9&d>gGN23|M4OgQ9=YxKZrKHvGC<;Y0(I*11?KVMzlS`F<|&(L1q8%=vSmG z>mSyZXNgk&GZ=QKU{#&Pz4s5^c^ott{bTzi<-ENcGHxEfcUZk3DUv)&zbv&;*CBze zPhicgNE#0D47nUMOMK2KD74ZdiaP+DJjZ+l^PLDiZcYds6KJWpaGG`NPh*HUidoI%Ap zxxX=qO_O;nNo+zi(Gju=FUP))5sMru#eK(-#+ zVeBZkH#lH1QVML9{zZnM_@d964dFEaHSf*@eXjt-z+tG~RYwEQ8-AwUm;gROZ&hMp z2Uz;!+vOGDls5mwYk}3{1WK?(UuT%rJO6iCLwPyQPHzr72O>T-Ps~AMuIxnhuWlF$ zF2{m1*i%EW)flO?#hxg z=2I_7Qqd0h%5^2hAKFA_c$(0(khsG+tX!iV{HAt6w`u>eEPa;Qhs;Q|=XwP-$tCDsy+f-~IbaY)H*$bo~W6Gb;TO=~f82>R&!PBRXdyt9b3A3NVy z#E!IowKk6Z*Ob+WLkQTG^J2K6Anz0#ksPNe69GvK>7#+8CY=IsXL64@?E7%b(WoxQFI~L7v)q<0@tU z+>e5fg2v3}9|fX3v|@|kJO&4)QHKNraSxyLa(Zow6VTtF`uwUkdzF44RD;lrhIP5$ zTx*g(dlI#H#KJkc-GLaSY$yuqS1t@gl_kY|W>0)@de;W9xfa}=vGW_BuXbCfZL9N- z7offiE|z(i`x?}7*4cjnlZJwX9n+M{jU(ad`m_F3%8Q_W!mPHSJ}L4M>IaY{F>pZj zRHyObJMymYQDq@CI1-3hDYYcTzUm$U?4SA$7#FoJM;~UG>S1@xjGD4xv&uweFT=*i zMc7F?4IOkxJYYQZ^!53R*NjsW!T>wRAl?}44*%D%m5 z0I~=91#Fn@W^RXQ@Y7b?xSd*!IL+P0-g4^-<-p;3tAR%yBFBu1Y*R$%9<&tfxvzqL zhJ2wecTqn2nz*5+X$A2<);L+I!H5^7fn@(>-M+jEqW({rp|5F#xf3nyqOdZ8;RuGO6)I~9YK3jM0W&_n z1$*nvhbOVenx+5O-nWNC)wX?CDwQ&IS16mI?x>I?`^^-Ux)YUdDl##3Pu-FzuXD>-YPe=XGA*(lpS>ri;GXKHce z=HlG6`&g#51(@+|NGALW7Uc}@Tn;{oJTet=jiU&NL>CcEB!dki&Z3FT$9YXtj~ zkHemrLpJ7z{VP^$e{ItiWq_mbpz&jeLOmN~CnOhKwS5zL3k zM))gBBnMyMS4ef%RmA0U%?P2>#nUv{qo|P{ZerexG}1@Vrq9}Nkq)v0P}+?Axj|u#wm^N{^O-Xmp&Fp-@Eq;q(D`gHI6Y^o)cGfIMrC5h6h%3B-(A2PP zU-2RZxWhK94KK=1`4fiMV%SLa6h%-f=J+2X1a2l{u(-Z&P_E_-* zl0~_rv|LN|tuB!#Fp10W63Nn`(-Jz(nvN7)Q&8UTQ*Nc`7<&qNGXv&+*b2|8$}tNe zrtp;{2Y+dRl#y@*>vrT+`k@walwd1MNt0k9Bf1A%)1@!)-NDac&VakE#gR%=75iY} zt96sdjvh)$_Fi?~wN@p}ZhgYk>w}RO)r7@a@$h#~t zt3hY-OY2TTgy;dBk>KV=P|7LRfWwFYm?r6<{2rD9ovY8pS;#qmLI?lsu6%>tW9>lu z#4M!wb%A8x+!zEreh%#=4%Qi-xyj@9$y7zD0?_mdnD3xs`o~LYC~#7HgG;0PA$$7Y z9`t(_{F0sy#-IaO)yW`#z|RZ|k4n4(uB*!{8lcDwj4LYFk&1#B@ARYl}lPuRh;G-yr9D^)AH-^O!JO?W{EX#Mq*XhKX`?(%Eli!=QL~DxQ$i8&HW6;h>F5GsQ%Xe_5_nJ3Y~#X zYNA2FmXJ1s`$(r(>P*h$BIq?UR~vo=DLCCp9-`Rfs{;B@$RpPRKw15m1{L#d*uW!k5g zewM$1_ulF>Xm&qKG4@Hc!xyA?&Wg=@Hp1zr(ysR7j;x)5Himlfw}$+Y`arKgct9Mq z_O0Kyx&(nz#k~~;2Zj|@4jGTxTYz3A4?z!$k~r$Vl3iU7q7umPW}e1nF8V-my2?iN zdJ&G)49UEX$VS=($QsEo><14*)1a=)Df9um^; z9)JFcdwUc+!qi*cIkJ2(mBJ#y_5z*ahidi$mtK#CBT9bvD^KN)5o(FB+Be;zx>N8EW({%LS60!8*zl0) zBBZI&aPYX<>C7q3J{lK?(rV=cMgw|tgt`y$0mCQyY;B%V>SQw+2<_=F%`B%SuRO5U~W+DXOkx*oIAp(9B7!`o6cbDt{Bj0x9bn{WTfSfQM>DzaAGcpQ=kP@XbxC5xsL|_h>QEo=@KhKycl6Vd6o86 z+yexh1}7kKC8Sm3jfJe~IFaxpJgMd@+*6e}TO3v6hF4s;utRT3ebH9gTf2^2tu>Lj zS64h4b=RupY+rMLG#*ZI_Lv#*cy(V-qpdCA3Rf40KAG!M`?f8IDZU<9I)3d3)oMUgnRK6kY?hY|zC zG8Lh8M<2QFsz*Z^VlIHPD80`xM|twHln^9uaFXkVL`yo+vJ@eU%?vXIKFV5#Qrml0 zdrVM6;UI?vjlY_avB_hxv?9u^1mjvQ04ff!lJW)i2j-VGKe!5kz59-4i+nEbF{owiqlS-6+5g%{ud z_^dr#;JwtWnx2LO!5BaUd_`EPJ{*yP^3q?1SV|6!E<1Ht4!K;3du!6dYIc~3V7|fK zIaD=8@m|~3VBJTG)X$+ZtTpbL_vNT`?g}2RhdJcQdtwHl7 z#;u*|C` zXGRs9;A~omo2@MlrgIvG#dc&^_2CLblx-Q72HnVKgId-9PsgZBULWFs==~%faa})!@&bd1U1@s z*05j!N}j6Gtkpul0m)%hAZeJ5MJZ|PZ0z0rTpB8vq;}z^;5)D0iZ@N|_B|`#bga20 zcjhpJ1QiW+v2e%*@p&9i?VP3a6F!Fp(Tc{saL%(72E(f&fv7`Z8XWNL&tBIV9`LEF z2Fp6IAjN_F`94!AIgau>Ss^W*Vf@!!~@j zvE*7S&#xg&y`rT8@@;`8mk1Ql4`aRj-%DWOe3lAAdE*?0@e~H~SnJo;AU>A^Y~ysC zaMWCwSM*y?%@<@?_0dA?jSrsLhO`%=3zr5n%kV>{;q(p*GzN_% zi3#+4qsn81P}mCkVm6u8i~XS?kd=(FaE=x&qzaa9%V5qEnB{j?atx_dIjEeJWyVp; zkuwhnSUUCT(a9{;0Iz4a*sn`(#*|bX`f2S8Mrl`&{z>O7x~5&YUC>Jld{0UVSgr9hH$Fis z-n5mNu0@XFnibUtEn7Ad)Zs?IxnRZe#I3p7mnJnB9DUHZ>DXUn4|BWnSjW=(1wT2P z5wn(@R=-iD{_X;GtaN!I-$J=XTbQ2hSuNNYHAri5M>g|f^tgy-9|_;}#Dhm4L!X$` z&NiTt)4T!|q+Tnwh_H8nB6&AMfr#qn`6FyL1r63#(tmlN(-}N8%T^EAy~c$jkk9Gg3A#N-+3m{jSPwM}+>Zb9b4H4#!rB}Y?xJ2tOm^StqMa@`?I(!CD|{8egmn5`j^Iz2 z{EhYq>NcJiylOMhV*algS>-a`i)p6-pvlPEgMEYB<4UiYlDJPf0&AJ_JubUg9ljtL9K&@+x--6!r`j0VoQ-r{Sqo-LurptaMjsAO z<6_iQtFR_7zB#V>bdb6xpyAEWt-0<$v+Cb6PFlGpmaNEHIP+kC>G(*{RBHXs)Ri(j z`^_5PxAdAuMUc%C{cQ04#p+p~{aitD*3TlS|DJozH6i{?VpBhn-$RH`i zAqTX$0EBH+iq=g6Az5Z|6NoyoC*!Pc9z#j{^f5{PkIYxvr6Ah<|=)D%J7>lYnORc~bM2=s;W(MJxe+ehrxmuM9TT6?c_VMq zhpl)BK5Y@B-c1ve_J^Xmr=hGEjd;zt!wm5Q{T}Q2x3Oj>=^Gkkl4KrOycfBHKF)L2 z2UL}L8<*-|(f`0VbP)T7{wNFOv*|D;9yg!|Fcq*^4+UKI9j*)Hm!T(b#$1C4$0?}@ zfg%1ZscZ_a#fHZBV@6Uj1^!)3g~!7q-Fy{c!g}hiMHabsa*Y#NstaI+jk3}Wz5{m2 zq`PuK=U2H1y3=ResWgp@rKYRyk#Qp_NDQy|a&L(`%dcUfa=N@5W;d7R*AF9p6eH}- zme~-NpAFmr5>55bQuKya_e^5e0no$*9r{^)^7APov{zuvW;CY8nL2`-b%3%2%Ei!t zL@N6};1P1NqNTf}y^>h7^ru##t30^a8^~FuK}ij7Loqb?3m3`ny4ANfjV>>T9vGy5 zn;h-EG{e392o7<%ZV$Aj^DFBOE}$-%N=D&jS=|u#ALhC1#gOODojx!2>r^S;S?}*M zE0m|K_A?98oqZM$olaW=)$acp*iww&hHa~t-}LM_C8=uP)75n!;+sF{n%uqT(9`lt z`J=Tzr&EefJ-tljj&~KPittU$;P}6%WZoVAd`u0kyeJ5X-8oqdT2J%kr3d^F6MJ8w zFDozci8%OM8Hv5cwzeLFOk&Q&iJoUDH@0C_m3~)0t3SF8$r-Q9LW@mW%O*7%U7FVR z4*-CT8~D;BPaV}gBVKqbsBCfiOLLU7i;la^*ZWX6*uA7{Atx;?X>;HQ)P`!C8$Fwe zcdyq-wCuynV6UAQHS(CjAzmqSsnFr`X7RA4scWP^i0ObV2A3xNh9hW8*g9J;*`RQ~ z5sV`-(1ybkG4sj%KAIjaVdA;?qkvYnjBsG8<%?UpjKLy{qf?b%_S$?pFN)?dJr1Mv zh^~iJ>|i~}q6NiTh^H^A^>1lb9lMeBi+49@9>yVW zY%0(GjCJfGKGm-xMkMKC1{D|?wjBNBYp~}7W^rh#9+yU6c1yiKhnw@*gXeS4d7xPA zzYqBWxf*(3o=)vbK}_oxZJruQnI0wke&Rktjv#V3>^XnoBpqHFKwWzq!iK;QnbR{8 zraIg4!Few1ZwJN7E}$v@MccbjI(+g~?PJ1p`QLeSL@<-9P#5}x4g|i?*^A@RWnuz<$on1foz0c+SNX%}^D zB>ej&Al%@u?Zc&=X*0oKZt#`GSuF?Bc95vfie*Y=@1YbJ`Nq=;m|nj~?TX^U1PoN3 zUV7_^?z!Q|k$-2vg?5}JSfuYkuaI;JC#18tj^%aJZ=MsSeouG!_*?9VXE&N|kc0BF z>gb@SwVPv^^D|dr-L$y zn%J|EG{~}42OyS*yK!d}pHQE*lYv~KOlGkOX;I!(_P|DxkQHnL(wR???}slT>xXsEFCp9DZbVaNrZKidIaE4}7Sm6x&sG)PP z`k|@cI_O5pc-I7^b7lZvUg>}x7J)8F{lKa5z<-8FT5RjwMfQlf71qdhi#*ZE7LCYE z-B{#I)m#M^zPM~!hcV!&z=7l~-0T$>sf{mO{E`&Ee7QCI(#uj^va9R^S_zosS&?2t z>KfkgRXSt8+ZF@26$jh~l}vk6aUA83A-a;UR@fCtuoR2E&49fg9;D^Hu(hEkp&PBc zz_w~wPL@K1WMsUpsA%$ca?4OzuDpoUmF?I2)NC?I%={7v=Kg)L>^zDG;|i8~$3%BD z7*6mRQ6Xz!s9TYoD?d$asw8lTTwekBer$@AuW*CT;R@17fEgScj;d-sG8KQ(=Qs*I(Oj%ZXRKz9ZT zZ9khc8ciy{8U3|GNOvR2J~J3&VL<-k%c%9089I@Oj+zRFQ1p>KW~2aZRcTo2uOg&A8P5guWsJrb?AJg9pk2d$|i%?Eu=Rt77XaZP9{@)<9n0m+*-b zAw#TjF;AovrLw#46V;7RF8~! z8qJOS1F@akI;5!GtDx0L&#?cQ}^Darp{~r85 z!(lwVDek89Eb#tt?*`beCq5&Mhn*rY^!xi#LH9=!<(Ko^Y~4W_kmXv_iFKyge;^I?oZ@GjhiaPCyoq^3YceE!@=zRqB(?<*UHkVvC$Zkyhq2mb> zJGfyPljkKi%Ex{FN>izC$I((FjhX)BGo(nlKm1{=@*cZqV&qG=I77LqWbsYj~Z|CVyxD| z{P}yx!cLi#DB%_MD``IzN6jL^=U8g17eT8QnH;#hOk;&^>gJT-msWp`h^`g!>Mc3u zd`e3+eOwOHKF$)wz)5T9?Z>C{*KQo$pRgm~%x5hm=iWk{gDmsP+VIqjBA%Wt(tw+^ zdK%}yQ4(;H)Tuk#WGEty6pHkjPl*L%KYDvsZWVTC`M<*C+OrzypiVq$T7UF!x4}YE zbd=sRP%dhZYm#ms!K}->Y-1KjOs5|C`1oYu{DHF_3gObDWlvzGk2^}%I%eOl^ad+i z3?H2dp^K6%>TIcp5f`?aMSDwb+MSeP#t{ofz&rYgo#ZI?LJsa|YoYGM*~ILB`8rR6 zmP+ngPxK0BY@N$Ds>xvg#EZnH|VkmJwvzS~Tl?2FM6Dy|)0h?#i5 z3b`wza7RXx1HW?2tbYkTd%JbE!$fKmQSueeqh6ew%6UET+bj8&5e-CUd-$i7pk=Aj z%no=YPD*7UG|s5G1Vxmfs%JX6J$QQ8XzGmA_V6&AOb9z`V>aRL_2c5UxPS-#*YhTo zOQVrfz5z=<^g@Oz?J=!&{m>rQ`-PiqiIRH8Ux!(`splXk)~Ee8pAR?><}6Kt0N^P9 zBY`pVnwXQqjniwOXE^=b^z!WH%*j(h4RnB%+_u;f#Z5VF4L-FS23gJ8SJv3SUE?T9 z-#f_q66l%zTdJP_P}`+J)BcD_&tbU_q1#$RHL1Iak;a=P9feDFxUDc?|3TB=DseIz*LGlEtFSYF zqD`$#xDR`DE|S+>qUe>v-1rdIR+^F1^fKv5P5kz#gupn6=;<1r-z-L+3N`=^ZY)(QG>*(zH;lPLRCzKS6c1!2$#!)L^ksnvLhE(<%0OS3S(5Nxj5K z3$uHiucksdYu@LjMV}57mE92v?>m|?#SwG*^M5@#s&cSAblSg0m``RaI(e*6d_Xf6 zjqhoXFN*f`8qqryjW6kyM^a^v zd)R%O1T={%<{y$$oQYY)4g^7N~e3&1mn6F!~y{{-H|uw-$>V5wBW4y4yfDO}pW zxi{9c+95N8cr{X7TOT6LGb4jLI%v@vAm17qYlJ#3j1y1u0+k1CEZ1ey7qRW(*ZYdh zK(yCDK924;jn59TxK2nr;%ddyv&O0%G>!J*X-87k-FY>!Vm9#CjNyRn^ zfTSqy><+>Ps_%$6v(~h^JbDVn_MLmM>V1&h#`c=Bi|z3SO9ctUk;i_g1ZK@SAT**| z&qFe+M$fZ%kJ=~(`7!jae=AP+QyB&VdFth7nCN%(;M>!?ydGbFdH1t9XT!&SmuB;* zDKt(S)`c8uV_91H#Ty+lZLIj2$d5Qf(iu*yya6hIUMmiiz8LYGyRw&0FA}aW$rYIe zvEEFAIbh69tH5~oiIVfs&{EOPZL>}nF6gXHy+~|V z_(4j{b{{+6$v?>i!Pi@g8uw75y*oGdPGhc~$I7vPIt-}#w8B6O8$gf#-*1;i8o_8K z1HiL-CUuSKGljD&O%}KzO7{|CD;HG6<*53aMe9lmDwOtpxhKB+eS_1^6$oeox*>TI zqkU?(ht_O|g%+SnPxF$Bf7LTpRFf_T($MtN7wcDwc|!+;8V9u=>pDDfLq!tzp$d%m zYZw=RW=-lG6A3cc(V9EdQas;&H+%@)EPEbL7_dKuuK1QvIAL|B8i!FuCHJWqPV3F5 z^F@!3pdrOeQ>*%Ds@WI%6+|Z-&>d1Qi;u?gm{Or2xnoD|GtN7!@k?eAEp?)n0`cW) z=doqC_WYaw*Xb#j7A#ow^U%J%C;rWD|GVjbJ@7x(14U~C5oyJMhfbCyT0slIzeD?N K_hnk1z4;#oxVYv3 literal 468781 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

    OYjdu8-zv8%vcaxi$+K=hoS* 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%0Aye36`V+#_1YeVDV_G{1As#cl}1J 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

    1NS^11j#Gpk=ouAC2Sjg)rxez8 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 HZYn1cG>02aj?wAgUDAr+0+AgEFUMq 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�SosCEGT%g(J-dNH) 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

  • 1&H>amE(^(m#R5baYF+-3vKBe4k9_^+s1%(~2mvgg0T9O>5I3u~N zDt2zIeBLxH7~;xZ!Il$PHTYq9V-1T=iS3p$1JP3N9tn#Ukkt*I3K{KgxXUzqra(d} z{FIiuO(dp5yCWOV7}Y=BitwdO8QB)2$wpD;xL`{d83Gi{QRA=xQ#uGpZuiN zBxOuDZ3Y6TQ8>=jQFzdk_*TfGngmzdf}lWb97-c`tGP#OZn;SEew5d$Y$u6bVaU5W zDMMH_`_?RzkoCu7j+sS%D0iX5-7aJw_7T_TNjh{TE0dB!@q7?oyJeH-93$v!5ZkAI z{w}{WBb!OG!u$PH!fa^=9xM0qfcApd^}B7Qp2$}fb*N|u#`e;a;L!#|$Yd-3Q7Eya7xpahw2S&)So{(o{~lXk;&E-6v%r4!2dsi}rGt4&8)qUQx(8+S^=MXRSmz0F*{GYG0qNO=-+k#6|qOuKI7S zif6_M#(mGXW3F23)j&$I+1oiTwFW0E`+?RuoA+_otks1!DM*urUg69i0-aeW=;6D4@I(aGp(g-5pP_ zwc@RFt(c6xr2cuZLVe;)lE<2y6L`QL#3SoBaR!`lF@O;8LEpeYrt#ng&0@45`T<~R zH!Q=!S&1{<45mg|ji@6TBSLGyLqV~g;%;5eip)hO7*HUS@`AB%&s(t3p87RK7slw1 zAcEKpQ!|&*u%WH$h<0q%S7miQMU!!{*^9Uw!8M{VH$s&*x~tFvO}R*9-PbZC9z$Pg zzISutLBCOB@KHJT6X>_a8!L}cnK@)qEAB59Qi?P}-7+92`NcsfM@cERi?~Bei{9~P zf`+Ji#)f@}5?r6Yv67yXI+7I(j0u_sTb1PtPONJyPZ!w3d$Qg7$3D^)I0a{7Tj#>U5=ZLzlGEcfk`BizcPA4c_$idNHx**6W8Pip2U$&u z#&2i%*0>~eVDOQ5uj^zazlr?T!D>l&`sL!ih$+dt17WxwZ)y-3?S;JnGXZ#9N-tUDn6bYyG5ujmW5lXV> zQbl&mG3%OfqQs5^b>dSnK8cKk>Ze_PkGSuD-%nHH>8r7wPH4h0)p#9vHzxWJucb=Z z_*eH7%Il)tb(Gm+uQ0s_qD`~ovs}f7^G~8}!9%<{xO)ZT3u{vmZ9chXUtMudic_rH6Toy>g3{-(cH zbl+=eE4wCp?7OE7>EHm$X_984ft=ax3BBTWoI$l=sJC8Y_!k--hXB@>oGP#&iMz{v zNV@IPlUyk@UT-oD_M6#$QZdfeS#983IDF^J;n~XwWm`W zoVU`kS}Nv7;P@m5h zk#S4ejg@>y!Icza8@v)^yS;zsyv!BF#he|4`T|X4;*7%;m(gpj=w9k*ND(4V#Hc{W z6OQuy%a^Gz`C(i`6Z%|82X`3x9xunG~T9%b8Qa|FgvM-px6(j`u$j(R~Vom2TYqW;=WrS>&e z(Xiy{lNmGWl!WTu{*OvHDf}Di%9%MLo`p-t>kn`eK)w6*)&DP+>NkI@=QR(9R%HcF zt$(oq{xvg04sQW*CNiroQBVKX6?x`_@X(Eu@jnO@ML>Q9@4kv7r<3Md&QrlD4k zP@kTQX$q{pd$!TVXYTQuYri!ohBBEWxHd2 zmG`lANIVPIBHt^B8=9_FKWu}%si?vgv?PjIm@s|=YNqiGcCjBU&h3@1FSC9We!K0< z*9v>{8_@=)@PXuqXU6Q%x~<5T!x{sIflcF;uiS*wXAnkve>2RAJH8KOaRIZI#{W^T z{jG%wT1Y-{Z4I`2@avR8K|whCB&dEJ?4TASdWYcB0{<);Ak__E$AohAtF`li?!dC~ z=hj|n{qvxH`+w^eJp77@0Pk|<@1lC!0ajh~bXICmGUh!)Ec#pnMCC9u1>(m){-UJ+ z{SExCu3lI-TBN}lXFRYyh)Sluwmed4Hxzh zK0G3(0NlTS`1Hw=vGfw|LC=kA)GaX)P{=;R{o{{r#2>`N#d&#MM@L7Ijs_Q^s1L~| zK$rCq2rnu@_fdE)XA#iPYHn_B;ugO@qvgvhxXh}p^`Ctp83D9FnQStbIvBxWpG_(v zKj7>i0%$--d<=9JQG~1}Y`#Y?ewaewGTE9T=+E4I>{2bD>!aG7kw*SMyrX}5tKEn= z>`Ltd0e?)(5gbQFTPx*#YM2)*fBqD_22KfGVHE&m$IUE~XVE z$f?Pnc#t3$;5`;{nMxX$G?qu z!bALtSd2q4aKOq~GlQPM@7j?CPRaxxb=yY|XQ4+lf@VVhB5 zF9Gl;*}k6>IxNdQ3EcA=4WrbFhTGcOzd}MnZmCw-?o++*CY>hq0<-kwASR=$Yq-kA zB{^wDF$xMw8ztMG%V{paiQpS}wS-8*3TZvf=@U5@5U8OqQEOL)}260N$S2o(W4rN=J6+-Nja z(fJoXKiUB}ZQ4?)><(JY*T_gBLWMHyddWkLa#UIBgFHseu1AK2=%cEdz}Ezr9OCso z=r7r&xk{+T@(4eL;4yft&W3d#QYA)&kJ}chwDZXtXOd+I?xKp0kD<;^Th(X}!P$ek zP^6Vc^)or>e1T*7@0pBW4NE8==6d{HIMy7q&7K_C2~hm6uW*4n1kbCJa^UtHR(-My z4DWTG7Uo%FLLX*@ivi>!=&@>V*_3Hi{}(!8C=+?rhEZP}(=TMjL^caN-uK0w^%*dP z^q0fR=um2*wWC5yxEf$e$F(+};9q5U6@95(n-;c_<{4w|!ZGWaWPLB3I0%wEbU*M6 z)+&F=u6&liQ(E?0`COB$cN{jnt2=4-(`h97dgEXZON?kyRTF-$=Zi~q>90H4@fOvE z;+?k5x1s<0>z7R48OdqVC|0BT2*|uEfhey#T}55Wv1G ziJc}|RikAbQwp|tZ02|#ZstSzJz0K0chJ9iQ`O{oeYFJz($(Yhf~5j;pmiWbvj-Np6#%~9xdQiRaavl7O$gm7onbL*6=BNjIGE)mv$wSAH0%7$jmQ2}i8i+s z+lfZJ)pVSrPT5BvGq>W(9Y>2RGv7>J*)jkXnxQ7Nb0GZ&&>xQ>0)!(^A0ErrvU2Cf+pD^5@XC0_+;2Y>;S3kG+?Rk0xI7dYB^n<-@*LGv?+(J`nc-4h=o!2^R_y?` z(W-tfV^-4LC{VBDR`t7~n|bNQ>k*(Lny1p$63pT_jLGQrT0tkNnYA-6!PZKxU*Nh? zH>TuSm}$n1Qx*0Moj$K{(Hu2nYvK==>Gg;+2-WfO#7POaMorz)dhWZLKyBIZ8~GX0 zi^;Q%&4Q&*M&s(+xIY&(Fp7@><UP}7rAi86sR5bS{euVUyBSWw7;CFW`eH(nF$uJ?es47mk8}?G zgHC{pQ0kUO;KrpnDb_+5-XhaKmJa{4M59pR$p4YT6%bNFk&C9l^@Ra)f=9LtgalG6 zKdRgeLcsu_ecgkq^Ie!=4r&7(QNCnELh4Ugy-YIKXg}9>(Vyy`J=~AOZgfxcFpI`i z_1KZv9f#{*zj!&j2RoK^2hF})GRU2B^hopl?LPa*md_j3-#a0CnW*s<3SF}43IP(h z>?%|c$e{9sf=~UQ6Rlg^_eu~&i1(Ta`YD zoQ^jsctcP}?-WoJqBR|1rZB;|Ai8ks>3775gCE*AyiohPIarZ!9Dny{=S)3DqOTqp zWz}gty~t_FDOjZQC~#C!QyQkf$s@}xz*L1Q7R3}Fl#D@emB1de8n%*dpptGvJYLY2 zShNcam~#r95mS2&`+K_f-B+sXw!0<-&j?w&n%9i7;HrM+J=9yEtP&ACnZj^O-irI< zv>o@SimM-jrQZ2v4|hj4mx`N&6@wU~BHVhjsB%og$D;beK=4}ex|ms}GaITqYU?Py z?U+3t02Q$wT-0FD-A+F?Pv!Hx!Juai3s*wgI(^@?`C^zA6@lKNWLa(RVMGxS2x2-n z&t)9s-+PfbZeHT5YUu%hLh~+&Dl$^hB%cFOfXs`v%*lne0?-z-fBfJ7=PFac2oVQP z2}uD`1aXo1@E1ilumfj-7*KptixCVT*uEIQN$k4F&&HeYMv*&kI);~NQay&Q0PP15 zFjXZB(=juDCI@Mt_=-j-y*>c31=Rop}(QEUNdxH&5CRj>J!GazM} z1I?FfFM(9?7UY8@S+W~_q5qtxnUUjak@_Xai0&ZoPvw|qx&dSm@>R9d9>g9Bj>owN zNM3_2NZn+&6p(DDRLRHgl;1N?Rxz;zyJw6CjS0zI%cZ1mmX8&Jon?Rf2mz*-FlAS2 zK1A+cY+L^`8lXqI@sEUOF zx9OcnW1nz;!VX)FPxE^j6kIqg%J5Qc9#%`rf+#|!G_d>yD(bC6%)mVGmF zyTOOctFoc#BV{Gz;KCuDdt0#lj?15@V|2{D(Mu3OO)}}&18r-5)}{w|GIU-n>nvIj zYnrF)#+78aLvm!Cc-k1njwMZ!e>KTENavy2JETD~PD4pb;aokUd^D=m)taD8gB8z- z#S+BcBh!*j5yh;<$24olgF%u9OdgtoU^;Sz?XR!-RKlyW-zvNRD z=Di$t{e>Mc^caIA$yE6#IM-&1as{4go zBDpdFe^bV~o+hq~49=Tk)2pfXe29+A;|z#tnJl4t*N(7G(&NG5URCm8We|?HYs|&2 zWVKmjKQXR1-^uuD^5DYjZ~(hlh@x_1HSnGH39M?C3%^*Wk;|>D8X);pg=6awVD)D4 zsL$v_i3%t>rIkBVAL3H(0tptyp6l6zlGGTKX+~jQjM>Y4+=I{1=-YY!bMq9~#dleY zH`xJsgjK||t0^hAvG|4b#Z|QvDq&Y`lCz~SPrGB%M^-W&NEjSf`KBx8GT z5dMFReR(|8Yv2E&oQf=`LK0G^1)+o~dxXjw#$c@3vI}GEQlSlP$QF``8Dp$tA0m-` z8~a!iVeGqMW`5V4=dN?^-*fK!Jpc4k4Q9UI?{!_D&-?RU@E+@%Rzr#TqXUWA3wxSh z8Z^&$w;x+0eLl8E_E>P7N$1~8Qc3e{x+az=ODs4hQ#5?F;*A*28lzDjY*E?f6|j*X zFfVt;LM-@EF%VP@J>XQj6I$`rg9hZQ&mTqn{c0%yE3)r!PbxuT$$TPdtkz2-FnI-$|f>3-s2r=ELF7u zeJE#L7jGe4$``u(kjOEB?~pu*iw?v-5S@+yvpL@a`_u667tEnPV%@cPcqa7NKze_BRCt{_vhj22r*XQ?dm3Wpc`e;aG8|qLoxz}o!o(HLg8WSr+$Uf z-vR?~<<#k21xDT79kUN;Rr#`)1W*{vCPiue#-;_DHoDwnsHZNPB32m)HlUp+ng(0HDBwWQZsGVnp?K4JXsD~$Y}^&n~sX0<@F^+aR|u0 z-f?NWAilZ(M4mtEbX^Xk*j?2q{bb?~FL$@dR}MW=wtBMY2CRa?{yzVc)8ErEr)fHF#rS z1B63U&Ajo9G9?jG(}^PR(W` zjp(<8av`xA%o99%A$zu2*zRc6FraU!qesr5QRTqFc+`T5t`I58T0}yzMh#zqS06S1 zIcS9>SSe@BzH|MOJ0};JRyLKf7=w}DH6`WFv{?<|CQty!N8M~fq&r!W`?IItWaYXY zXn4k4$vXBKwm@{bAa_)tN>FYD;ohqg)}=24R~GGXc?U)cKq6c?ePecR;`zW)h@i|j1*bfFz8OX_$8398&*;Tj@2Qvd(@% zG;@~H;b`}!Vy9BGXq zsAXG8#vG}-->mH4ZXB{&_H--Gta((xg*vi5j4%Iwi%k2*-@90a!>(Tp^%1#+e4KVb zdEm*dR1LkRiNqtGJ0~)((dqE&NJLOXFqNFK0-I)JfET+CbRh$PReAGbi^-3-{O^l8 z>o7AqD?2So^b-N_k}r}OwiZLc>_Vsl==E+#csx1FdI&=TBznRzdy~k{49$4c#S8AX zi->Frh+yi8)QDu~cVG~ussKdi3o`5|4Xlcqknp|0Ti%2pSPE|*oG|)m!lYk(jcB7* zJ-u^n)LtWI^i6}mzdzxnbAkUIf#RU>{m>R+qXWb$f(OwvN)G{lDgL2yoN^Fuqm;m~ z#f?OAf9>_+ZqzpRyK&V3>%CujmKJXnaxpxN+YGq(`1?QAk<;x)&t@l1eQ@qb7tzi} z5HGNlh&gw1W52g1#b4lpcPcms1YJIJWGqF&-|O3(jt~QNlPV5i9J^z-ZV|Ahq}G6m z9`Zacwl|lW2_6_YFkIWch?y`j-9zmkV+6-=a~Uq2pdEj=-npE)norT#7X!U<*^b-j zMUc01$*`B!@1HR5T>pSP6~d7+xl%f~fhOq`+XAsm!rgziNWb%RWV#TxH~7UwB=VQU zAXWY=AInQ`to?d}+mB?`i3f9Y%2IAQBT$Qx6cy^kR>e2$jKO|IeG_5c@5;(lWw|b_ z1DL{w1fM6CJ3uzMUhSu|sdfzM>^Z4rIAl;&wkkgC@g@iK5TPnP*+Bahp%_~>6IB^P z0^4pyl7x*hNxW_?0)N?=+UwzCm-N-xdR@;p=Tp^zww5-$FKpP3Z@rIBfsqQ#it)1X zmX2DQA+9bTc>B9zM)EZR=Y=4V?0O`ENaCgDUfqPWg1k832Zrg(FH}BzHZiTpGYSi@ zY%K6PX5#RYbNC5wOR)ix*6!NbgtL01w;Z$?W^!Zy@0fB=ycH};(z3M1IELE$WU4Jc z=W|rfRa{71cNOxD^c2Ca)fo=I@a2hvZefc;Ux{XFW6*86GkylMN^eZ%5ihYR#?}Km ziDnPn_I>U@{pJ&=C_?CbxV^*WRf>DUfZNbnvLK)3Y;A?R7Ku)mJ)Y$LOjHd181soA znXGZX^cLiUqc3E^o`5SfB-SVapl|dhZ9`_S?$y# z&neATw6Asfth$T{3zTlkteX44f_Eb$@NRM-u4LrFK2AIcki0bMua4}I3j+SiG|?nR z;+jYYX6(Hvd{%0eqJ)zh4Cl3+7JC{3mfQwtKs9*M+iybWp>=A8*4jf`wQQ38^}JTD zi~upjTz@A4oSfBfSxGbUjYf$|C0N&A#ACO`l5-YKjx;{=C^xS{bAtA_T^3kc2zB&q z=CCS6ESktDk(viVYyines~5yM9Lb)=giv&0HhrM3-nnr^0a&CJ&Q$P(`#@u*l`dc| zlrv|_34ZM}Wg6ppuZ!oHWM3pzl+Xz#VfxS^_GV+@b23m(A}u#-M&<*-r8j5!V;3+2 z*q$kJ%a#rHc%9><1kgMk*>Z!rVq7tmmEb%IVh8Jrl#fKPryFp8W`%kfT3q)ZO7F-M zm4xAE)={>a~uF>J5!-71RIi z#sV*4fgKZ)QV!xE2T#YFzg&CpTkyRPR-fsMp{Zq%Mi=U@(`t#JhOKM6JhAq$+Ea18 z$Z&qhgRmaF&h#))Z%#SS=#lYvF4CHYsZd(*IuU07ecbEiF&t;nnoCgCmtNUBO6;V_ zW955WvOlC4FYNOScohJGMkt6<@EhmC_6ZgN#R+E6_g+CtX2R)Q1I!TqdRupc0x3ZA z*H7m|N%yyNtJ%KHuH3pcPU;Y;+jd2)k7Dm^Xk+^D7DtbJSMO$&xJ`}X?lO%eD4j~V z^;M(d_+3k!83rXAwvP`yz2m0f7o zX**$^Y+9%mgZGU$cjUXWZi_mg7gx2K*jl;i0EYxdTtW^Et(*0xc_Ya|tBS^<n%Zo>`rNSCE*;XG53P#lLQv)SjVCa_>27myIGz!;|u_&Onhtdi; zn>E_cc1~PaTr zNzd>%7RPoiArWOfO~O z)(mIsp2r@n>X_`(7X&ylBsL1KGnx{yyxa|~_YTHM zfzhb4Sn#jdV6H?~@$7T2dNsq7eV%DR=6NkrpiGAAw+#Dlk#pehcs!2K6|^%JGl~?# zC5oTve}oDn!yj{VMO*gSt#M*>``qXNV=BdzNS(6fX}#5s@TI3Z=Ft!(}1=mVhc zN1Z6#&|2Fhhg_4{JzTB3{Pd9!?m`X$(|s``EhqZGJovrbOTC+s%i+D>pqq3$+m+vm0F+I%lql!%`zDK*x4xy6LtpaCal&h|c4l^bWWcni_{}~zTEOOXMeFPKh4P>$4>CHeswg zpJ}A^vdsa1FuZ4{s{FUK2lE1(NK6cW6Xp!E6~O<#SLN?p|RtWKkSmUK~T>#RS2Dd$s)+WM3ZISti7 zIqkX@8NjfPrssLzW80DSuI8dGMmT3uxYVk%ES0OuILQ(P%G4RX5T(boTk2t;86On4 zqxOSZwJTI5ARUp` zbdy%cQY3T|odoE-b)2H@#if)-sjqz(kHL?A!*XJkSw37&FgMa6;epHH;sqW zouW3QuxIke^2cR&7Lvp(5c1?58qA*O)+}?SEpm~}{Kd3)enImjlO?n@#c%hjaY62< zo5m7_w~^)|Ekm^XVs5=8NNH2$S4*Jv&7aszucrd&%}oi0N$n+N(`-N!}rBs@p*8pxN?E7URnD4v)|}rV5k3(5mTL ze13QC@#Qd`D|BhATPB*8)Hag2pC6XHHF3P|Ghf1$-qis}PRJtm6q%c9-PRgf=-;k5 zBg$Ve%_S*Ev_U^vElu>auIESvckXIMIAY)_)a+Na#07`sgM~eC9 zZUG8t{P8gT8_wPpugP(R`vwd^X>HwnsAKXA5q;^NNxV9@K2$|7J~f6;$ich9?%vJE z<)INqm+|F^N}NPw6h)g3d@nYb%Ja@c{S`O*ZK-%ioq&p$di`wLjMOnM5?7q_j8|ON(iQ{jocHp;?T+D@w7>UCsk z+y`p$#fG$K`&PAd0|7@w<`)=_GyEo|xdbilyG$?-1P9AjMOFKHiMM5oRU3 zGthWoHSms2cNR8Q=(e>qZg2d(7w)kxbRL)uHSG&RWTQcza(|ohDD~K=PS(==bZ17h z_GZf^y&bK)Q3CS4xfL67)w{9_YO+-`{D3FnREi?5Zf)L`>zhW|NBNNbKpO7OiQKo< zTVL5w&HJ6kITe=f(eu(;Y9R;jd=25woeCk(#N({iVMw@@M<12H?UlQ{xz~Wylf%_8 zw*va}bt>M)w-p6LiTG{jm+L#b zyky_Lx;SD{!hjjXidRV-A;j@ny2R|sfat@NERj3&lQ)MWtyo<=?j*2#Vf!$tCaLsi zdG4DE_>e3(t@4A=hD|R|q=1{nLcpg0<;^%m8I{Q;R~W(FvUUFDjAFSq zmQ;&3zLSs)*XTvy3H;qCaY|_W z>ja5|OU!(^W=p?H(rv=wZ#`_RBHJd1$$L;>5=s&5geo;9JiPVyBO(3By+;li5}UU2 zOx*_evgF8>-)7-IoUCmhXt%V|ESW@bECo6n^UfF#osXoFk$`4^9m@$Ff~xo0K@rec zDD=iewc2(20m?yGcerRlwzi=~aFL+@Leu@&f#_MY4^O7}d&}hNGDQaq@)-|%ux5&G zP2M{<+~egH;$5p00<=m%u4G2W;#Du&8oPLikzZlOWHKrsdacrPT$Qev@s?a1J9nA2 z;o>-{C+1g{X2=;X9QBpOt9>_SlQi^x^vY@Ote>i#u1|W1Q(x+M5D+*>J>@i>=C{y` z4eU~WOGa_HM5zcI^2A+*Lfksv#VW2eo_fJqw??Lb2fYdS!aFj8)2e6`ewx~)s*8r* zWIuqh6Kc1f3#;W+V;*5pO{|Wo!Fc+Z8;EM&7^R1}QV=da-AT7eJ<`hJR$=7JP@=Qh&2XE%s{p2qL8sPyp5qw;IeHD>Sf&4OrN3&(Dcs-{R7 zFMZPuzV;CwH$#CO&wC)V-FmgRC;axMRd7wFge0kBI%1|6Yj+fawxf)_nz|leZm>R} zv2)y2ppR#;N2@LWc1dV_*|zMJtw)UtQs&dLdy`J>$q?MqMh^vNp3aSD9y^f8S?tVP zVF53)&P5QWd|kXgEx&lXzT?L0e_Zf<2wCQIqQw0l(WMGQ(~CQ>tsH3mw0^ zhm-B;+Gcnmin6ntvMDVt253|ACVldPMKZ6>npELgBhI?(Y+PxaEp~Dl*p@glZ>CXo z+yxgrZ+VJ+-+ZFqyWiE;(+ib+PSzytef06~ANIU~{RjDFTXHK`Ztei%U#fUO9e|N% z2pOev0s65Dy^e$BB1IqCZTMxJjZUxHp8>5#A#;j65}&CRPjRj<|B50YjTTfOGQr=E z=KgM8=z`ytaQpJ|w33M+AkVpHZ`{B)ZFT**^~$E)lSsV?(6?%4%7kg?@cK}I3xA&Q zR>@57v(u;Y?Ah!b>;^%-BzRy^!zJ18>*EdDj!?fD?^ZHkzR)MDK9i&J(4%LZ1Kbut zU$Ftu?Eyd`IE2_nypiXHwe*PPDpE4)^W&}dg21T7idW`m;CRQ zfFPs|1_@*2Eb7>Cj^?bE;E0_IdD}wmj}xRl#&l6|f9$}452jSYQ2#D~tur%dQ*l2XaQCdolSlJGh4I6}3>mDQpHIzCW2k9_nHnIZp8XiL7ieA`*fvY_J$ zO82qgq+qiNlH=m7ZY9rHWN;&-6O7v|ih}Cv_!mnxwf!Jpe#ZwqkvATef*-tc^3Vu- zF!z&r*c zoXLR%|L@`3|4iU~Sd5N-13X1MW61F@Mj}mqfA|6zqM1+Dhwg5&xt~VhRMlBCviDy< z`gVchAwq?IG}1_~X^tx(xjN4C-06D%cpiApE(A7yA!M~5Ll)l<_<**|u?_*Add`UA z)j=%WcmDN!#}zZY7e`5f;w#Q&Za>6H;ZI4&A7A|Otk!(q|In&17Qz|+ZO!Gf4D~mx z6`r;>5rc1`%DIEd;CEQ=cbRtT z)M*6C)_#uWBU^O?E3Q0{^SaGBB)zEb1PMr-ZeWEuZ)awjsXAkO!Zqc67hW%|Tm=z? zORL=lPqm(iCEMscM2eX|W|celZD?CaZ$J(vjwJS-a;xV}9e7D6c#z}H=Y5sIxX!Zk zn#EU|H^-pg!7qD9u#K0q=H249x8<1#I_65OHx<=S64j+;E~i-r!pWH}>s9pC<2u?b9nK^9+2rYZM}IX+XDCfZ_|- z%YeGoSwm&<)sasvt*ttxDplL-e64$N%Y9a%q}-|vGkCFACToHFe#-128S?1wE)m?} zJ9R4=A8wSMyt{`?Y>wtXv}4qay)%$+*h6z1z?xM&Ul^zLF02&ew`L+;KPy5iteqoT z{g+1G{Nj;~>4MMJ7V<5`fBs^I!q{Ofpa#2Snt>Jcn(-E7+dr7PO{iq89I79SU>-M>rx8i2yD{<82Q} zhSajcf?mqP1^D5^U$KOg`s9CY1=ei5S=UT*0UHw!Zp9!l9z5fhKE$V18k7ouaibS#Ay#Ss#@XjLOW z$azg@bYK-FpF5iV#W-{)R(!|#z4*>zg~VJ%FKk_0M6`$lGJLok)?6i__@47A;#rA% zH{LAnqxOH=KgCT?1cjy@Odx#dA$Fj&6K*qT=Mom>MqAXnIM)XJse3hXr_&ZO4CK}O zxK5(<@^|eNc`EWA#jEU46l-OyitV8vRon@CrcF&VzixizR&dbi5PgS=oF>q$pN)-o zi)S4pKr;K2Upy29+keY)2wV5SNdao-iSd_fA7eSy%A*6=BLOy>I#7;KkBd#Pr*AbV z=Kzg_&FgBb{2>1>Z&htg`X}i8`stwN=*L1Y=M)Z;+9QKV_nuG~Dc>952>65a6{^jp z7^6ci?SX0thHi}*o0WbZEKhUqp3uEfdUIVK5q(fn+>HOgQm@P8M(mKI%bA#%XE7oA zW|eK>A!o~<=bBQZtJ~CqkD!PvPt8xm*Pn7$<|4Z7OIfRO9oNp=3ROVX$=x4W%^RX` zZnYrLeIa6E$uqRji*8=E5-w+>y(ds6z7wdpiizCnjl11bKK)I-&T@{=yE7Yb6J0?@ z)iC95?9AQJJcPI7P|vDfAyhdg|8#1|o%zEi@2~85ReDjCvTW`I9(-$Mv&}Ei8}Te`tLl&?1Z#^0O|^nrC}E>|ZkO{nkgeHTLDu{*!;CFA@gA-i83< zfXY7t#@A;Z1TQ(Z4tpl-7=&ggzImZ=^_MVbUVV3bQPC%cle^Gf*Sz%mE+$J)B?;4l zv+DyLgLrDO=(H4U0LrHW9g3 zYu>qY%kc7xmyCky-kHHaO>I@&9Jb{wADaNb0@~^7;u;jOV|}5-8^U{>S~FF(^U8|SU&TD4eZ56t7tK2zLNACL(IK(kdW;n!=ywMM4eD9su9JTYqJ$990 z30udTpA_gfoR(Cu5hHBZN)0b@gjSrEa_ekylHJMWUq6}0qnYZ;jwGFu(&f{sDXSC&S2TmE$|+@wn74}i7mc+wIDf3e zf1f<6)bRdt>v@T#B9bVJ#91fiUN7~TF`%cQa*vsro6q6a1amjuHX#ppFv!aY^%Lb> zFYlL)N3xgS_Oi5mOBa4XXn+>4xFRR@il?2rNV+L%g%F2dXC$8gIFpe zH>w(7R3;Pd4>H20>7|Cyk^3Snw7Xyz&n8r43P`(pV7c_$3>IUj+LBxt4H?OAB8rfh zt6EwY$yq`NY(f51r^w@8*IOtHfEr2L2AKtJThz@V0N6WFSb!|%(mbF!Z{W6#Mjim{ zk|;S^?=>I6@1Dni1p!fNZ1mu4<;y#Qk0aD^$)C?A$*%2`aGt4f8@<4Ye9eV2Sz?V} z?TP3&;2jh9iFN#t9Q>|We)Et^M`)mT>hFVt%gRH;p~E&90*u&uuz57tL+6l_P6+ZD zIBng5^26p!9TS1GFCz zv9Mf3mMGSRjofCZxZA3GI}BDvE_##K2*_?Ft=^!|gW*Aw@DaMuyAK|Bhri(M9yZ z1%`{z@8QzOIPBK6MbcfeOs>^q8ToHZZ=4D(GQY-VXo5P>!lr&&5=$PXJFS-tjYyei z1!c1Bw$Ve|x7@N8nQMuBBhV8x_D!?yT8`~`58K}S%CkT;@N{dT(%bcVMdi%VKX-(G zV>0Y_ondC37fr@kClX-$(~E(W>AD{*)gy8!ZlQhyoE}pmX{%PH;i46kyARr;gnKZ{ z0hJeZR@*qLAN9ZCyD0vX!KHGWiP{;Lv%WwY0vQ!{tb5V5*14Fafg;mO-II5G_P-xHitq>TZ>#Vi>jq=ZPn);)(hb!#nGV^ohXaId~V4UM?(p@ z=BUkePm5=W;3Zix+zUkI*E59yS1xu>m2S((k6nQ8Zjg;H2S0%?+zqMZ5zmclNOonj z4EW3r=e?Bj_DFI_j`)t3-7{MIK6WqL0#ecGxY!h1ss;_rmib>N;Ku=ywfdk>5=oS_ zb^H1y67JOFZj@Dei=L7*aQDNRWc)ywW+}oK8d*(k`YaTfW?yQxKfYY_K>8uiDp@yd z>p(bUsx2(Vi`_l%7f5I!?#qBXIDVL!EKl;MG8BA`zx;dXOqpf#N0W0<(xSx>3*ef5kDbj|7IRT zy_WP!#pm;>hkkXz`{!nr%B}26M(Nh7X9o}qhccvpZggR2-u z0}R2;R;vr6#uZu}ISH2!E3*Su`_4lLCHP< zroAqlifhktud%;fS@(90A#LWl;Hr8-ioIY)W?!*tB+wswj}N_|^-VvGKaYQ_7%=Fs z)?UaM$Nqv-E#NK=-JK933@(C6_Z=1%mJrKwY3Lr_4ZYq1^G1ki_vNYs+CECG-R42d z^|H2~4<-Tsj?o1$QaJexEwjl7fXZ$+deLWjc6`F-$nDcwycN^f+AmK)NPCsJ%leM8 z8Ah4CxMjFficI>pG=YUbHJ05>-*KJn$B~K_j?Xfeno1}P-T6SmlGI^v-S6)9sP20k zFp`5QJO99anAL?6wV>2we9HMy+@74)@X*3~4}x9&f+ipO*W;v{T1Pl~Te0I2HMs0U zI5vK=|J@tgi(lkN6o$P5J#5)5L)v=V-rVLhD@uZDP|aPuYqNWIi@bv_KmroR?=~bY z7FQDBL%XoyBEvJLGjhB&h*Ose`AwdV3ff?Gl}Be0{h~fG!zGs|wVUtOeOC^s#vWS~ z9V{2EcXt!7b2H0u^Yu(0tv0D6ZA7o(X7{o2oL|DpQ|YrnXj0gVg@34g1f+CVR?=@| zJxN*l+n$pzdUjC(vI9}T7dl28{44kAuHd$&6(aX&eD)`Ad7P^My{{ z&F(`VS)2{c9ZRGVeN)(8J5E9XFIB!g&-+P3mmG4JTYDwR5Ep#5xzWW$Ac^NvJDcQj z2f)%7vg)J&s^~>(-f5!mSlB*FN8l(Sc%BHe(m_a3{wgO0FlVwhl_5oT|v5K6g9HH(L z`n)Wv9lh~a5d3L1ZXo-wd+>E-r2-jbO1DVQ{EDpm#JVtRY>3T$h@8BIa|;Z`JkxQQ z2`ZaxJ-*oap{rR3sY-1;d-el?F<0{Kx^Xs> zd&HtDpcvVg#NrvVa`W@Sqv6nX^qDq?yf*%%`YJ^a(?^}5eYD-8<@2-$&bQ*Kz)CI z>ynJD0mCQBXZ!r|fBnKHR#)wDX>O}iHSpfo!au%SCFSrr35g9Tf=t9Xc0$}5fovqm zx+E{JrI)K56Ht1KSb}QkU)Q*1N?6~>$gaHeFK6rj5-fm?Q79}bd#Pmm zT;A#b`A%0QW{|!dm+<06{>N_;_Cl4aQ??{ z``5d3RsrjD?%A_v$4rhq{hQ1DpMOr47W0wF9Ie2o2=!mW61lR_E#gcgiT&{Ndwza! z>q6dAu)OAgLQJwSg~3U)06Zo8h)e(QF~bH$xr7GU+v|eeEIfMIz|YH)2;&+g2CtP} zIEb6`D%84pQ&e8O`>zk#y~A&SZWqjY@z2zO7k=|W+kd)o#n2ObyWcIwO0u=r1vDsg z)|F|3_a)04w&j`o*3rSi>}YOa3R~T(PYJx+0p|PFhgak0IAZO7OB+ujk z|CY%^M|gM!0WCyaUVdnQNSqdwtid6qG+abi4Fu=V956Xz)%)W&{O3!m0>~o|^>Y`1 z_+ICuMQ~r4J4udyS*{VIlpcy5yIR9sg(`Y}sxw1&LOb7;l^D zq|di^r3YrTRjmHp4tn;kMfifSMuHTErauITp{`3~A18Gc99oVhU9h>&N#Wp=dOu8f zmSe%p>ZrM|h%s}jFn(VA4^Lv+@i4ANK))p)tamvk>pES%uer4qYovlrR+nOB+^|oG!42I znK-hS_sEegojE`twiqz#J^b^T`VWuJZ0WuGPR{5&%%V8=ADb_Liprxs_%IBJ$tdcc zln~$#(@M)X#0nNY@(h-U%zYBg3;X zCCSOhfyz94M-98X&CsA)g=oZ^PlKv%JB9D*KRssqjlxtKqh~Bf@8+5nHvtv)#GXp% zg+PZe@Qto<%m7SW@qb?C{XJ1MR*amk;$ALn39*=RIPgj1=i{BEYCT+fmlov)_+WE2 zdpL`L6-61b1DDfel?2l1x0Ju(2c5;}nwHyD|Cjd@b&uIGeZ?KL5(gHI*~Pp8@YQOr z65E6@BzmQ&)p4FQAi3(iO40o?V&tf;{Nq`&*5Yn#Yr_NABvU}USGXz~>cUXP`xuUb zXm;0ZA6LlFE&M-R5?AIht}$X2`sV-4CJheX0g;Qqji+UwpBnc_4@%mQ@OvQ8|7UM} z_)&hHxTnIx%n+E`+uK7s#C+F2Jw8m8%m?SEzuIxFx=TOa+<$l~xU$ZK>5Cg|g85@H zP#x{OQzI5#c3|8xS6^n)9+da@rdYAy6EOZPZ)ef^5u-53CDOew4rd#G{dw)7=eX!4 zP`~aZ*WV}?p;xbl36U~1+pj~Q-zw6Q zf72Cs_q?!C_~-o^ZJ=UviS*>jlk<|2xSI}DU^)RO1o_7T9UbGiEw)hk4sfu#ZE4~< zlcqE}w#+v-V3}qe={C$B~%cx-vB+GFTy>l z?1921rwUlSBb<{=O!sp2OYN1YS~IAaK_%_##JH5(_pULU3jSOVz|mfd~t0L?%!t~wHRgVMWJq1 z#yU|fy{9|U@u04?Dw+l-S%F72wU^P_$G+#tpv(V;%@D$^S4Hw;x?-s zUVhmf129h4T9u=(FJ6(l*4D=sZj*Fl10|9(iB=#~j~C!-VVQ=8VRHl~ex^S@&x%Fw-&`FbRJO3Igt5hrovEfg~Z~-Kwb@ zz9atM2Y|zd(;v#)Zx|aOmX8+*-Cgc2y*tq;J^m3W>RbT^iHqWgv@tA>K)+wi(3|VZ z&r1*4L<*>uGzQz)q*rZyeJbnRb8ZJ{a(9shz|5)e&Y-B+Z)DRw2CfuB8*N&AbNfQ(ogD^0S5Kd1wIYBQ5>8?T#Y)Ro+vIo9Wu4((YgGe4V-AAP z9elwO8p?=Kat8ZbipZPn?NtA%gx(BIPGxeRWne3~69P%Vm?;$GlEx>gzGpQ6CIfFf zpW;>;06n*yx>-#xeth^WWh}dQ9*}IJwh4;>>z7@Z2aL~Pdo%1cxgp-FF4lr3z4RU; z1~vrtOtQG$1yIUWe0!;NJ5E5+4XVg7>JQY@^^q2v0C|!s96|J1=#)(3!A2}J+xq3p zazpnT@K{+s#WF^q%!-8?B1VD9=LOWcmmBkWHgzZcAv(%n*cNK|i^<17rep=@!e=E) z$CyJ8x>$oiXU>6e`^E*@&SD8eYKhtgUs3ac|Gf@(7|>15dzjIH`-)I^C}=iA_`&Do zwIY=OAt36$j?FRl>ZMw?Q>)*Z!0~Gq2GXduxgT*ZMx4N@R;KGAa!fsg&*Y(G2$u$fyzo3vbk{X4AIkg$8@X# z3zWr>2x^DmN9#bfR>6Ms!ijSDx8>S!wt2>Ia@BxImE|0_2GMP{C)>Bz)KQ%>D-XfO z^s3othpTf>SycMvbKVr4-Uf_&)18fZ9h;k2D?rvwwFGV`QLtQdz62|TLMa&HYkzbU z*Rr|Ihi;k!9u;5JG682l#cGZ*d&HmHFJK04B;XUl#d8kq zh^m{;6+)Li)2iQPF=JQ_g#5b+%_2t8nuiV80dvXPv&qk{@hHs~0e+ z8=cZuP1&CI>$!`%9XlI184IJNZGj}NZy#VsH^(D|q7N*M0GYvvy6`X=S3R;Z8X79} z#<+vRm_>1Wb2n0}={w5R2j?LIfvk(paG%QT^1NteMPq~oHYVD&^Eb~ zDv+Dq$^ain_0<3k(>P`ih9U(p9oecHUJPuE19HUY{s8U0hx{!U%UyskCd-yH-a?^uOW&VdWBO zizo92NRNAsu#KxhV3#4w{YGf=XbT@<3O9}Xbh=@aC=ewUBk%&#Ltx$_N zxZM2m3!7x6HS1&DL}`)CNvQf+w^cCdo3F#L>bQ)OFW=glXXr0y4A#-Pa7)A3Z@_VA zcrlRWh2G`yhmH9g;Bl3g%AUf__bM!wPH=#FHU;O05v^g29v45@8pkFOd+0#;wH6~; zF()O|XBvINb{Jv1Yv~YE9;y!RYonut|nMf<2p_4q*ng=Z|87IZ0uJXUDZTmc zzJ3S`Yh2Yv0U!~!!2F>4tANtBNy&a;ZyF zK|jqKG)YRwv+w0iVZnh|eZ3gUt$U-#2q9x6H4hYNxD9j&7-~E&?`zECyX3ItT#vqt z5zTRC4VVqgVC>J4X@(XrjPQEU=e)q$5Qx&&!;GN{#)g?D&>-xL!W%-jQLzn+o=N~N!J+cLz{MPX~T7WF%%(pz6J?qCdIvNo&J6!0f zr`!rG-zMtnLG`!Rz8+(#mIxCiK00-n(RSeXGo@e(*OiU_#H&5oLBQ~mrJhkv;8HXi+2PRAcr2g` zB;8vn`T}vhZoPE>l>5oL3 zN!UC?Ej(((1p8>hQUSdRBPMb$K$py7Ju;FuJ}~2#vFcBGz)!uTJkQwP9^}ntU|KOv z`OzZmeRto?v96izlMz2P@+Ic_5{N`#*g|!Sn|2qdU8XjkidlmOF$ms5CdPM6!@iP` zqa+xQ;AKzif`JPF@|1m11CGS8P|rglzx-yb_Wd=ZZlo`rIEZQ60WA{rN&HW&_k=!# z<;Z98#VDs;;~Dk~Oe21=QGv7%%2cNbhnk)r+uYB^@)KSF-Jkf8JK%9mC~j(Qe#(c+ zn*wJ;@cu&Z&|REZy9TwH7)$R$XCg6gTCp34ycS5z*_CaT(a1#90O6iNAhvQ*f z7dtOQovVNZn4vgYjSc@}-EN_Dk_G`?Jm~bumUHgoUPeE%BWEvd)%c3`Y}&ZIjV+GUy{#zH?#2y?DVt6e!1#8;-)v@2VH)CVN#3JVauM zZxVh2GDL|qNHTy5ik4iyJ>khB%v9dM-U)fe0POyA=iTqca-`Q40P*4$`A|Hng8Ix)v>DDbTJ73>*ON zRRoHGw%U*=%joDxP#6vh1}$9$eP+2BJ|8N0MQ=%Z9f#*5XJv}PX+5TI(#WtFj6TX`DVAj z2nn@n>0p0G8+mo@&kLHR#6)d^#dkXa^W(CQ=Hb3X&EUgSsZvVs^D94Z%iliXz_mbF zU(R=~Un(i#jtQ8)1uF-K7J~~BR|YDsnj`OXo&cl9^4E?G$DbVn>&O{r*2HK*#le^^ zIq)S-G%o;niVT2dIbV?_Yy9=Z$M(aHTob2ISX-fEd?FzC?I5$B%Q8$PkDFg0jCtXEZQX;L0^su zH31-;bYsZwvSw(zGH_;@VQG_JRFMDr=+y3$>Gi<2E8qKdAf#_r&BwCt&Ki<*z8__- zBw|~3f9$(q&O9ASgIr&U{561RWCCvbuKg3>dtQ}Iyb#4UP6CxZY}M>y;D33rL4z%> ze&V4iqZF_Thq#t7$AiY+!0%YuVrNDqU5O0hb3`uD04h;34?1MuPIX>&3T!G&^d0&% zE7#eiQ4q4Un+3DlzIBZu_d(%jbZ1N6UOYrt$O zexcKae1lfq0VO8IhT*I3d}POww?qOEs4j|5 zV|+pFniyTu!RR3><_em%o1Fm!c62UAF}MNkxdwPI4ipJvouL(Q+bHvjldlb3fw992 zC+S7o=qsOLucA4gf$RxF4o@_;@ftwN!gNGEo5f46sa7(W6*CICsHNP`P*i5%TNvFn z#r)2nk1_(L5^sI$1Wf42bgP|zyqErHZEfuvPLA1yxWcJFU-oxj6<-|#{**{IuI~ zEn}wC=~mNv_+6;)j7yfzz?J*E{HTM5On(_Z{@qdi3-i?zc9FHgM{{?s)zu>P$1SNx z92k(^Jn%7H7yb-fnVj-)A#!$&T>NrAS)qc|7}Y3N7#f`|nicT`J>*&#g|j<`rfBHB zx)WTRH@)5|%|JS{kL57uqW4yU%2T~vbY=pW-V!6PK@XUO-40hK9uZv_D#2Cf1nid2 zIKM$l2Lf9i%52`NGde5XSp^u?CUhLXnaQZ9Pz0G!X|p`^VYUFxh2g@XHJ#zWHP8{X zXC;h{F#u1bnCyfA$)wU8dTHUE`qLm!`SV7^NN|zwQ~=}6UE~`ZztY8?>{lcJ75IWb zwx1V8K!D$FBmyz~ZE`X^mxj(@P@-^cyP)yYkU&;5(2^g{kBj_njBNKEV8-eMoL*C- zj$i4DEGOPje*uImu4uF4qNgKS1VXmPY3ZW-FwQv98Fco_G6OaO=Tv2=AnnR@+JiZU z6L!Pu!vlv;jytiuYt_w~O~pxDZEl)p%EGFBQ9tpC=KfDD0~61-&^d_=>t z)H9t^7*>Q^3tmmW;;k(_045q|&92qjm?^t4oB|F-#|ULjI0AfK$!HjuQEheFzs1m> z@m<=b!MGB@B}=Nl_au8plO>>)+`vuw?W+3s3)xv#cvS}TNQ~ZGkTCQuwDo zth~V4KqX!Q)t8mKAD~~cCW>4Kx(PIJJQLH$!0i*63$h>D$#?*MqT6Ls+(P+G{|(10 zv!kH9@PR!AWEcHNmbDC4YPDo+hx@LBLj&j7m7fUu->=}m-u-(j^V~;)t*C|nWGsVj zPl2x`f_X}JE&#-)uig+6^8_5e59nIB1@ytI++R*H@N78=#wde65#_0*gYX83cdXcl zzkRg+QsV#HJLzF(g7ybfW5i#r*;h4cv=(7>uTaQOgUsf(}+=fdZMg6u?X<udAsh4_YMl9}Pk zlr(OSNIXO|d?0WNg&)1T**-*Qm>;rYTopsLn#{2_bAXc+gLtyt7~8 z@z?y->w*#l(n1z1v<2vd<4Mf5HLRlc$YKN%+ z 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 C492Sf diff --git a/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/tutorials/03-01-xcode~dark@2x.png b/Sources/AWSLambdaRuntimeCore/Documentation.docc/Resources/tutorials/03-01-xcode~dark@2x.png index d22af823e942e5d9ed12fa5d4a873b53be8baff2..bdb286e64920e991b00862d90b2307cd9a8b0fae 100644 GIT binary patch literal 858347 zcmeGEc_38%`v;6`RVgDS6eg9dnWV@zLn=v8sgPwtNJ5N#J6i3O-EA2v$(=}KXOexL zq^xD^V;^RiF=pnR=Zw1V&*%I5J^wxbJj>VB%sF$;d7t+=?{mGc>w3Me>lAjyP;b|c z{X2Mgcy{SuID3tUXXghV9^Qd%Tj4D&c6a3A4Tg@ox>xjdbq`)~ceQuCZ^y%PAuPd! z*VMRWUxxWL{cQrF!SP>H4<3>Vju*JaGks1V;rZrmQjJeCZS;hNEGk29pEJ?1@bKJn zr_kDDU&F$!eSACQXGbgg5>zFF6Z_#_ceIy?F|mMr3B>e{G6KF#?y9%#h|Vo)xJJ|N-v=Y!-AZ;_Js+Z;dy>H zwENr+Yl(Wy#$Z)GJ8A$==!s_Y_V%RQMZZwbiLW}L?{1tnj!M08+A^wOXJ362^+DRTVQu!4~OYXO$-Txyc4<>sX`q0U*m(&DndkzWJZaZJ^Y zW$Vii58_1L*^0`HYlodlluzaWZ^nS6DvOD)Vk#fLeH_m!{5#otC}aE*!o+%iy=(UL zi>m^&Ji()aUBT5miay3?ZNKOL{pQ=@+O%5Fty7!NxrhPJV}!PEtdmrEbXxbX1ENZI zjpHS^-|YX)&YFk~2-2)y6EKMo(s6sNB0b)18!}m)B1v}RWhy=l_{^ICI@lR*Gi#JIlCf>eCa})*gH>UC>hafyZ(a%)2|ss) zf9JKP=(vV&PfnkTnQfzPviV`_=5OY*oT(*ouyfbdrAdJ%`5mLr8uyLYb>#LmMc6UB zmhNGe!td*t77rlVJfS?A0^9nuw>zmP^M8E!`h89o?@+G)qlY}rI!6UIHR;&jJ^M{N zX0O$lw&be#A*CxjWB5d-gdT5f2KLwfeY)j%PL2Ab$Xay5MShgW|^?}i*0ttnHL z*iZm|s2CReiIa&&(Vyfz@%nQ3%dRuLBb_JpUj#f!+M~n!9U;+fwARb4eV_H_fJ87$ z+w*N?(F5J#(8@2qWo5{;{#_rdbO<-htYf}{=9{tazh;Uzq&&KI{wiCx@zt^_k|sVO?a-8kSnwEH`+gYZ?XOqG_nuc5lmbHK@eZ_z`AL}YVD>P!RUaI`)Z5b zFE@N<9zK&@rQI>|H{XUDHIc<>WuBv-H}-w;u?W^!+zKAt_T-_A03x>b`c&Y)pJeyr zd)l`|Xe-HVc~`sj%7&7M>6!Zj5d4p}e%)#KsAyQQY@EQ)$F4n`)4ul{`TTIR{`kgk z(LZ%04*hDzH~a6^b$qLMFY?wa+pGMo=jytAJa+sQ)~U_cB{g-iSnT~7M%K!d{<5Io zrg?4rt3Z*@Cy(#5f2L+578!ERTGn*y(WXgTDO1s#Pk&fnevn>ZEpCdS^GlCjN{iC? zA}$s#J$xo$D;kM?Xfpi6M=NMQ;Tfjhe~GwRy*6}Md-2fX_PA{+Pg0)PoDsEF9XUR- zGaylYdqLRQLlJj%mxGBmCzMi8hm<`kds>F~dDLeZaB1%Fiwj$i@Wvu!!;c)Chzr+G zy}-KAq;I01{<`$eu8*?)PsJ`7N*c7B8$Us{qAF2uP?f2?;rklGN6&@543#O8eJ4{X zb2+{(-msPTZ3*{oOvr*Z+zwi7g57dgK*C4>!y)@8(R)E(fe#^xMVR%h|wrf7G~JKdwObn?gE|QM6yM$*}gC5%hHSU{>^3WLJ=8 zOQz{F(^KU$QZpUj-hJ2jySMg>X^#S0KIv1q=X1}vm7w?~nFX1pw-c{s&RdGFoCk_) z2sNgJvj73y#bIo{|M=izvB#&j?%K-O<)-UjCsLR4%zPJ7gdW)=KCgA_bj6+J+Ae}f z)_MB*!t=ODul=9)uZX6Kgow07s*2)IEGSv0tft;c%~Msg|K{9!a^+M)a=xmT%i00+ zm<~Jg$F}~Q{%ZU4_F489i^T1n?UC)y?R(lI+8L>&(#%^A6iz7gm=~Ka-}>v8VR4$1 znG-WYs3F`o!R}MnOxlkFP6uX>%x3rO>akQ=Qwc~tlX@%Fzr@2FGbmbeqoj8})Jv>V ztn!$b$=p?cRh9zlBCC!6?c>VF_0|!(ERioFM5S*^H*8(hzKNAbZ;AdCjYu~&+--Qy zaF-#f@mBO@(MtQd@91s$J--qwK9vQ!Gae*W_Lh75oBF->y-zP|=$bf-yZNBgUr=+Crm&BS ze+|u@(aKPtS_vtA$1rfkr|sL-c3<4K3t_p(FT%B5nCi4zZ7pF<`(hZ<{blTn{1@c8KE39{e;s|fr|xKe zst@X$+_nAv0$X0LUY&ippf`Ay7z)Zh6WJqfEJ{1+Wij`&59iii=IG`>X4S-7Ul2}6 zy`7qQ>8}2rBX5rO9I4UYap_j-cO}QU*S>LzQU{J2#2zrdAR8uIX}orn_wvy3a^)Y# zKAm2f+?y&}^u{9j-sw}`GhL36j*lEezHM{Vcl7T@?|8ZS#-kdKptZ?mD@miWtE(2{ zs9UI+eXP*laJ=2>oxF~z*5ww9r2h1Yq#KDp4v*-|9YGc87M0o&TEbfUF7o@tL#om1m8(Q4`grpuO>$uIA=_ddm}y}xKaq1qa< zrDjXQ7FUO(oth^N{1ZKH&faJBw>eU|Uc~)mF;-uhWw@6+-{Du%F~`KH9Q$kZypDVOohxoy!d z*3P-D2}LSqZ#&YV-)XwtAJfBRG#^KDt9jS&TvqA9 z$kFY8cl2uTSsn0c|*zf!%+Y?pXcOVqsHm+0b?zN+G2%XE%bhkZwa-b!@7 z`gyIAaZ_mN%UGcF9ce#9`;35}C*Dsi4A3gYT(9+wTQpL_5PC|GK4;}s~UtZuzn0wgu_;2id&@a-+klV8La9xj{ zTg(D_A36v;yEJY~j?G!lu_Io>|L`dHIOWajjb%DhUDJtnM9lJDD4)Zc6fQvpvFo6i zo+16}bkqcj1z9Y$4*$p?SU~rtBNqG@)hR0>s#31IhHetZsx%nrX-*MB854_61U|C9 zFRQU>)nFAEl%lODvMTgBc;;^0hR=9^o=oXYpP!J=&)ivIKFB;cqdd>E5!(Ka_YS8w)wr>6#I;a7ycy(e|$1G{&V!s51E_( zS?3*q_wnc$>+0*nOJiGiJ3ANLU007Mtt9SMZGUjV49CN>Pm255pnvViB7FWn$LppZ zrk5|N+qya{THkTCu~YPMe!x8skEV}0yy|S{VSUiY`MwKI-AC)t`Vs2zI(IYb(82XX zJe;%+nO?qfP}kMn?x2d|amC|@&^rzuJgDh@$6o!~+4Fyz!@sl+-SzNzppHU$dwVN- zD=WIXJD`-*)YMSNPoPemI0hea4Cm|OVeNCw1$X%ON&Y#{Sv#DqyW;~7M^~4F-1A!7 zxO#eM9XiDA=-7QY92eJecD=pCARk8PFjqZTa148sQ|xbT_SQd5xiT=1OIXv5XLyQM>uv~3QZ`;wew$fLSpx67}^S*-U=(M*6>lx0rO zkQ0faMpk}3KvS6%J4HA(S@!+bY?`X;OMz_<|M%bjj==x7M!-jABR;V5Gb7C`bcv`S zob5UAHO&CeiSDwuWKB3&1hHZfa+KI)<6ERL*+zO%cvW=2-u9e^u)y!E zqor1AU#?MSk}9VSoL|`@eii$MKUbsZdW_6_O0RL#oI}leD=7>sgg;aI3LR*$hI(;l z9e?3e3Tc{Z*r84=9VkFeg|40Oyzna}8$M+qAw%6BL!0nyM_-g-_5&U~S`R-$^8749 z#^H;z8AV~~7)mx0T%X6CWg_hEiIHXxV^_Ml5#IJeV=Sp0?MJmXN?k5KLiWkKQUJRlm#kGwx z=OFG4l0&~$knh`&ecfxS(g|~r753}y6}y?|70L!Hq2Jbmv^?8`CfjC{1LLnyi=ZhU zzm0Z~i5MNw(u?oWa@eCmjH6A=v+W?p+N0>VDC3at>1Kb!yBM>%wsd8zRny$7C$V^r z9`DyZGAzRA2WVF9W$}VqYM*aL8p@T7Vi9_UJDvb=tnQ!{Df6j=m$GL)($*Hje z^2a3683n%iM-!t5Rhg!nX4szKcf`uWk2KyLsVGX`g0*qfz@}&nN1ULmlSo0(Xs#021_>LcBcVkewc2oe;hRMKRa|5 ziQt{6PhGpOp;)uWr0`jj8|x@??8<5gVJ!=N#W2tS`hWCAQf;+>IjtSs2Wj#+ccw#&e?5pVP2Av3pT=^AD^9kr#1eQ;Y`cHd zYv<)E5k3f>ok^S)(4|DMa@zzzB{U!h%ZD#LP^k(hB`=-I9X_*msz{fA5*VoAXGEJv{s4(XV0h&=#7u=xcVPyM0G7#h3l$OdC(pcIC zT~_T%(uZ~BJlXZfZsN|jcYvF}c=jmHZ9D0fHJ{vP2NV$o_ADQU;-D^-Ohg=&AiqB& zDXhD=Xu!10fqR~|vRS1e<}5q+z*ODqPEz{zesOT9hlj= zc089>`f|iK<#Y#bQuMJuz1yq3JhD<^ES=DauXu>QG{b&>*T?FpAuY|faX5ohERItg z%Wv`_7tnHC;I7qy-(71uWGMZ=plgN}&>nT>;AZr}&Bq1z3zR%{3!cNDzZ3o5!gc8O zhw0wW&BQX#R!5JyBx&Zs!f*AamqfGBO*a=7jUaWPA3s-6;!ZLD5XZ!`U6-0xeA-tZ z7F}ga?eDc!aNhB%0oz-+yKuB%T~N+;OG$}K6@+78S#*eu5U>{z0{r&pH<=DxKOcc9 zusv+kfd4H6t)oWA##VgZtyY4q z{LzhuHqvk6Eo>YyRh>n|5~tI8R!t)aXqSoG2I;~*#upU}i;-63euu$RX@?8O7DJ$C z@5+MX`od(Tl1v8>1+=-M`TdHS{2$j!5-*&~Dz zImO{4UN#q7q!Q_Mvzn~?mCtbFo?_r4>B0Zr&i_80|4Yi|WV0Q+7oJRCw)s48P@9$b z>6Y&cv& zX{fSa*ZE700?6~CBP6_Oz?^-9U4HM(64~qg(S5YJD=6^RO7`k2SZs@U2f_k#3EAKC z^Q7-`QsK}<;6SUH!}Ynh%3JM#kC=Y^yr$1lx*eVOtjd8y5>Bp6BhcZ;lWClN;0*r? zn;32aszRyIuepa_HrN?gnNRYw+iyYkfQeZBGxr`*Aq_ZGfiKF4?x2Cl2n&RRnin0< zLb;cOhs;h{ucevcD|EHsuqgrRfF=P||IGBhq_qPV=Ue?A^$_|=LcE1pX`bgBqT#rN zF3pPL^mjgXu)*2`+INa1M+@l^O;GfWXWH8|cW+d8PuJq@uG2?029~_XX>=B%dq1L^ z=+R%44D93&Ge_{CC-_F|1KRnSr!#-{idrJ4JUXJ!)E?+9dJ_#hehh4DiN(A>W|Bay? zP@*h-o@Q}5?`UFAL$Vhfua$;niDUzVqI=^yv1Hc)k=dCL=eY*YC&*gp^)m}4}8z*XEn}DXU}K;q&dLgWOL%}BN@e# zO6{OM95D2g<|y{UxsE6rCbgg$%J(`$(r?+4i;CYP-8k%)rZT>N*UgXv50Zi#5Sl969DVc3hk zm7m#a2ZnTi+MOJ1ysl;)kPY8K=QniswLwRdc@m8b&(U*BmU-5H*-z151FJ>LHO z;obE9YHvz_LoQBdu}yC}V5a1~GJfsITA3-aJle==2Kh38-d=;Y%n#&IW}wiEX?6IZ z-rM=kGoz&i(inC(0fyQRMd=acn!8J`wSxJe8hj@#sNTa)b&x z>Er6Vf2Hkbpc|j`7t95&hpykzK>96HJlDaipk3PSnlP)c4yo!%YUI2mAo0IM(a>EW z=-QX0L?8j)ngrPLm1R;3s3^`8<~~0iyz`931XiAZPXv|tk1&*>?>Wa7=EuiAke{Q8 zt9J+33AUWJ0L6f8T<;6dD64Azxw*V-6vgd+sF3Eq?gXE^fenNi=pUy3)7-nj&y zW9q@uWWVP$V$w3Pfph>p&`FKyD7~#0LEwtoc6lK{7#3IbOSWy4Lj8LV_;OxH{XO{dOh`_6)KNN}3u-=B?_Q1{Cl0r~;{o08tLK+Y;8;&p+WHkWW>*9?W){q5 zzgw3gcICRT0$T`6W{egn^l6wc9S?O+Rxdk&poWUNpZ#Wf%eZm`G*$1rt$$U*e}L{L zqFFC-Z%srscPSHPDg6lX5$H6@mkMZo$**-CtY|%oXH8hixYdXtCn|HYXT#}Kasatd zqW9z-#SbJX4bNT=hzDNG5%1}JN{{a+bx4nDyn(K`!nThz8Ushb#2@@3xG_u~4*k}M z#kC|{aTdG5wJG>y?lgMHuRVe79h087{};JAFmrtAGfHg)f9S)#M}A$bq#x&lbt!m1 z=sPQC2$Q0>0_HM|R$KI|ffdu$i&Z*A=wRy*!aBxhIJy*MyYfob1W8_S^aRm} zNv>q()ZFCsH({st1UAkL>$9%0l*vv6g(N#er>hrZWbyt{85=f8+*&T)_F(v=y_g*0 zwI^b_=1#_D%8|kS1_PaV>YTpfV-zfJ*X4SiZUh9rQI>LxrhvCe!9aUj} z46_S~3gbWlOE2JQ;Zskgm*1nCi#*ap=|{->0E;G7Rx0e1>;cZl;1bV)8_w@ku4lj@ zfy0bG6WZst7r1YFrQ3@;eX{rlqDG1T2t0)5PRNy1J^TS7z%^(ytQ=v*H#f%U&s>Go zLAW9_P!^Q?SHAG?1*~Eak*VQ?Qg5G`3(Tf{dRfvFNb|-G5^h_z*!zOf(9v#f$Zs~I;qM<1oeh8DNbcTYwDYhD6d64|f5BkPR8X_#i%}}YA=QwR% z5|fO8Md7|3`9qj>g-Hv&f$)RA!bko74QmezmC7HWK*5K`1(N)d$Ox22FWaecA_!a& zV9r`DGr9y8w+y~I)^{eSe$V4GRL4Uz8$K={=MnZqJl&v9o5HpG8uWfTHL@D?O2Z4pD0n`RZf(H`tCmy$x`JyFj}61+*NRC z-(%P#{Ubywg`ojW?u?T+wi1LC@0*a!N;|7KEZ(*6yJo&c=8l)c`u=yo!Ht@cQ%eE@ zMtcW0HAp6NL<;r$fenvp_}`_ z>VSn^kA%@Z?!U7AZeU^wB*?Z!Z=s%fjSa_hcg$iqYMoX;53_PW=7ithoPVA6iY`2> zj6m-ww{T220XB;S*dY*FG5AT2F4Oy8VRW%5qyHs2tL!57tN#*PPE`&OT4TphJXe?w zc!18;lWJg^V?ePA-!wYwB}P{ zMe4vncE^4J&LYzicX3LPxp)?FR{JxutX)q_d}sA_`vIA$>(_jF+BV(BJ2$3jAUZ7c zUVRz)i<+!D*je}lDRIHK)my?=k2>PLU^#x6rAVztPPTI}*K20WL&!q_wU;akM%bXZ zB%sd_egO1<>6_KKIilYJY+jH8&0xL=OiK=i8cv~P%fkt(0Sj?Zr~~M5^-by8*%X*5 z%iIK8;TmrEx)uSm6ME|ogE5JWAoS86w2(1t2#!9J*G!K>@`p-ibpF^}Zwj(x^>6O% zI&O6`NCE2WyoR2X+GB72g8XpOL*349-vow?k~a z`g5oa-dRK#Z)M`+SRGJJl#ceM!Q+AFn2b6SCQRDyPYgQ=M8J9$dfE@_V&UhD+F&E> zI%a1xL5-otpaE0ojU~JP0!L#h7@v$*4A(<_WrYl3mVcWj*jQCAU5CdsXUUyOW~Box zF$d7jf5$}N`$%-Wqey*UB8_*$uj|vl&6VUbGdQ1m3)dp$PWd7yC1P zd}I7=aA*KaM~Q#kPx(ExWv2klyDX!7&$>(~+#Gw31oF>oWm&15oVTmy2 zbKKj?$#L&v%n_XB#b$rpG4fZs$ph)eQXrXJ(71EI=wDRJxS)xvA@@l~@t>H&mXkqg zKx)A1k%{@i0)4d4{1TK*Cl)zEse5!){Xry=X#{CN{e(HBTkw(z9WD$ntS2xDY%GX^ zl3)cBhVm%Q;Sg7P%0gGKjQ;8ip@T`)LeSoSWtnM&2ZZ25xe_OQNe+^Q8R8i%|%%I!=CY@?l#}SKCl9(4rM%-4tjtdFi+I&P;N>8%<;L__|_=jbhGBPx= z$Jp$rAtkNyl%RPWbp&^;XIQEwzQDqu(IqxU%%}Wd&-uo{iNi!;RquYtnVMv0#PA#h z@fXqV)h=H!Od}e*p$0~I@SuDnyfcj z(SZqk6H{7cuireVXAWRlu0z(o#_TNA!z6W&)Bs){_{GCBHIkjx+cxhl9d%9{kE_%FD zBHMH0!JzF7F>1LgV$q<5;VT931>0~%DvY20ksqvHGCUHimH(&0DzAaKq4R&s(f|!Xz~)yE0MM@`0|FF;Uv*e(%ZbGh zY>ABTS>eLMTBgG-&NY!0@YR z!D}I6Bx264s}(ggGpAPX%RZ;}8mye9Tl1t7k|=A7ok!BQOxXrrBvU31ch`3^4SK_( z$0N4v#0AcD=J0ncHNpO!z%mG0%>f3@7T7RZMTnt5R1A3x=D_H^rYF{QVH{{Dwn8^8 zeeQym@a@-{4X}ELfMxL2`d#}+RWj&>Fc0?Fw0PC&$0lNvB?giO6<`@(wg3pmf6xRM zQADAF{h(hg$`DXM&isvpxXx^v!{^0w2tC8;PE=08WPBD~{khC>9gD~bf`Y~J$$pSt zRc4Sy1wgF<(_nK){B5{~+7%(#`{2*pT}s?!G{<2J%BXdLKU>!o2*@I`cKjuG^! zD=lFflBff@S)7BqvXSDDZ#ew1*`stqRS@M|0{9Onw}w%;&Z z2zbatY5R>POBrugo0>p&_4@E0h%sKLb}ZS|1CQXjNa1=oSP-MOHm?|x(5ThQh|h@y z(X}fzz_@ovamQQ-`Aj+(vVdnAjX*j4ZUr$b9H3_+C@VDsYV9Ju)7`ySexuycaHC&> z*)QK;>$j@lXI?+MYjWH~CuOz_Rn*zi%N#n2MNimn&NDtk3ptv{`|BKNu)t?6bACVtZPuf6pO(GEB|G3eselSzZHwN1x6ak)dp(84MekW8^#2=VIO?7 zIg_zMyAGPcQr;j2WB7dySc)EdB1ZqiM0W;-c&dW)9YhfFEDUG^A91DsqisX+uw&=BMCaY3sk z>hzW25%-_pmh7fZ8g4Jorw!ABkDm`Fia;CzDccg)IHJX5ZBAOY->o`_dyo}+Otl4K zp9o3~04r^nlVE?{3wAckL?$L~~L!@9j-IiYOAc7+2Z7_$4bX(T3>=v9T% zAdP5vXqY6}5;F>E>%j>(K!Fh^HOO?3lO9J|wQXjA{W-I@&^hcR z7?t>gGu3u$zkcz=^XWR`rRMUi3w%^5XkvX%fx30zpQ zo?YeQ7wN99eMl}bcmN{|heLC?w=irarr?Mb6)#~no@4L_1u~qP2~npux&5g6*=o_xt|I2xOjHSO8)#`}u6&o7XW0LokHJkNxE9wH&W& z3tZ?ej|rHxIE3__<5iC(svF6Y91^+I*pL>qP7exG9{fTLO#-!Zf^eAF0>^!6(I!iz zjdf_S6E@p4!n;785Ca;lez4{4tt0(&`-pAh>uBVr_!Nh@A8R9AZ!^F<15*ZA1c$v_ zYxL2Zpj_OtIezSWH(?pYF(-CNkuXy<;t+ujGAr=4F%NXQ2~)VKQgl-;`S*w-N)AH) zECvb&Ik4n6iT3d;hJIwYRs*`ck!oFhv&NXWm?Pkw%i|yTg-`aH9Od+oPp_noD=%n{ zYcmR=JrR}7k@#F*TE+vQ4r&hwDZJPCpyvFC6Svlm*kE)!bkbcWhsij^LU9F++{Pr9kO z=GKI=eX$GkiY#G(;nvHcOjJtvSUe)IRa?k}qQBgaf<+LT2njM(wV-iV@*%dWKRtPk zn?lM-ZvmY_@6lKo=1dWb2rXF!)mpHHlV;j*YCPEG zu7-@{(pA^-l(l=}U}YLqUgLBG@LV2=@p=uU6K)_rVrI=?iUECZjc@kuMUYHgJy2DQ zvPp(>U5UWYV-S4~_Amr)DlVHs;1=UFVACGWmS5(E927zcPUk%X+3Wm7N!8CrJPl@R zU{PeT6KL1i8+N4bn&y~LxC{;~s+AYsuhJ@Fj!!CpKOg8Ag~RMWS5Qn)n*Nf#X|KwG zTkGMin-+Au=VO{uZyqjM;xM?VaWli9wX%_*sT;I+qnlCeY@hcXNCLh~#0tSXA?6Z8 zH+R<2fE7H#!DHrN_MWDQVAYPk2Zr1Ay)CyE>rlqCiJ^n~)4t}yfC z*p<`xvZv6!!;>jGIa&rRT4^ufb_r5xKbqJLhW@f0z%ODs25U*6W05*wu8_b{i^hCP zWkPJsQfIMf111$E3z`#oz0QbtdHp;EDS+lU@+fIu{LH$y?!W&IY&0G6qI=iDg=-DV zHafYTQ#oDfR6GopV@463`mkk8^7@U5;zF(c9R^tVV~KL$0tW%pHnVpQ8J?cffH|Iq zt8j%=M_SEmm=N28tbo8&mDhj5p!bcbHEl(f>_Y3;^IXNhA{ePE3TqJBnu{B?2K%J;LT zN5bxN!7&jP;aMB|5E$CQgy%}DciS9N(X;uVJkot~0vb*II~ha6rFitl-J$CB$vYJA zCt}9ybRjGFEm8(GNme?=xTZ`iB;d|G13)qt#`0OfB_^X5!;E3T@1rb`F&qO(q7CGF zASUTYhQK?~f{s;ZB*5i&`bo1)gu`e)6Y+1@Gi6I7P-+N*2j;Tf^x?s!ePzJy;6eOT zqGKD$1(^Yl+>Wkgx(J~9uy9;##%>8SCBjPW2lcXurxJ%)hyjbneer^v27GFa&|%Jf z(7SGH`tBrdoG=>mBiwx-*PwDGG&`J7a=O-MrhLpuL0N^FJ#NeQoFhVQa4}mjT2hT&5T+hC>cunJQ$4)Hy3O?%#f^1b@X z=6K$QYq?1?Lb-S2E-GDi}*MqM@Nr3tr3f% zuul3iUjt?Yr*jIX*xV4a@kCMZn& zTd^N}F0g$SLFJ%qz*MA56b>7}*>y|7|t?;eN4tpflR_XUTcgJHlkzXsOf; zRk=}YEt-mKoc4~YTm^i}(<-kUoh7L;7l)*v;h}{!a1)55){d$$f4&l~!eJ1#_)qn% z?$c`@LZbrTj@LQF(7s;Erq-@~sC|SUkdbOV8)#HDJSKcSPwH7~GA%`KP^rh3-?`^@ zBzk}r1e*!H7O}}7su#cW1<~RZ1mf(VQg2oVC}NCuZf4@3)=$@KoQ@lb;%a8qypE8{ zOXo@c+1EkcMaIxCI95F&vdI8`A5M&ls)b}3cyh2IO#U<_)l1EVR_& zQS$G6;P3Cjs=<%zu-HE;rA6`}PGO+YXgLXR?Yq5BrvK(K*YhII9mo8jK33BZM(|jH zO4q7y4PY~OY7+lbc=`D%iSn(evmH4JeoBZRCjmtkQ#+lfRG5oDr9k`n)Nu+8L;qa; zfXPmr$(^tMb%Yey&TMr^*PjDgZFi;!&=PF@TXQInC3RT0Rf_L#ZWyz^^-(q91ux%j zP3o0-6Gxe8+@)-7>+45-#<72!uvx+JD)7*!$3~PFU)5$=#t1T_eUbi5zP5xfeuTV< zpkzJP1@K$o{X41^I9ennhe+6{&Cw=86F;_rG4Va-YC&I}}6EQ#N<68R==Dv~_1<6fO!IW~cc|aru zxwylq5E#PV#!~hG$-S0bJvN}>nUStVP}@iEHIVQ05QB!jQ|@}P=aEYrG?L0Hoeya2 zlkVj`r@4rDar(HXruZI&z%{d6)`J^m!q>3JnQtHSg9C-U@xNwJ`r2M`=RdL==Zwz$>jzO3+!}Y5rqhubpYnLX$f=@+4{v zHNou&$$u5fHQ>2<1fT`o8Vu0dcHj_@KXf7nE3*VWxV0@8~Y@FBd ztfByY?ICB-ml)%9A4wr?K{t*|pe_q%8u2T6x+M!<9o4-cZo&^UXDLF4s=@n zm7}yKmP)ObhF?XvkGT$VIp%Sz3ZPdg22LQu%&M6#Q?spHg(k^*6Tou)0_9U(>oCmO zqG8`BQ24pE(sVasZbcV!@WTc^4si%{f<9tW-($XIa{+#JGj!XUhMCdWQ z`(@mSc+Hg9qNyD1=CwX23@P|t3l*qxtp|2;_`eZc`aoWBO~_3a9C*M@JD+Hz!WBb3 z;_~pi!a9~!gbSnPphFVJNia7s=D2j6nE50!dkzKlJxF1Oc-h&|zpn1dqdX=s+{4(e z1%u`42sD{P^Tw8HLB2%Q7L(3wGUXbRT8MTsc29@P6+)`;X5RpQppnhlw8HqSZ#m?Q z$O+_Wgi+m_(M}c53lkp-_T6EGMFo1afGlQ~x%kRU42XffzH zU24RP^o^k^C8;N!NGtWIu08mblFVY%3|qJRds(holJlvS5vSe+^rTR8b(2~dK|c#{ z&Xr9#sx(FuB?)E2mU<;`ncWR_V)iZh&bz`TZ;uI`u)8cGNYhw(OWcO6-nfW@ zjoPM3W|jVq5B|qDY_!|Z01!$16ZHOfS;+78FkZIH(mf#(2XtjNJ=?8xvc5m7^PIS# z!3>Q>EM_p1XlY{=i{Yxcw}Uq&G!Y5J{dtf8^Jfz4wpQ=UpkiQkr2H88AbpSygaz1L zbuS=~7bTwMOtGL*N`^C13z#^q!gwjx_e&v0w91r^qMZc20AKI4I9CUL(pwU?&7 zeTAF38~^nu6TDtT5NAF|BbFA{vO!dHJOGGMkO4igzlf?uMPVq1@W^tJrdtan$l?&b zddMC!WyCU!e(v%2B)|lDiLB(fB;(s^MBs3atR=p@xEdH!Yx>3d;_ittu7OpDsMhXZ z(A-gNqFP;PCh-PQ8^XuuIoQ*WTG2-b2(=e#6^x++5TE0XkQWh>Au4QtW^uY+n1Yah zuGQ{CZ;pcDk&!vz}MMv5m| zP*T?79n;nPnalc%`bLuYl{laX41vP6*Ge-I4CWCIvn79cup)wL0~W@1T-Jd`SPdVI zSy6ZZ7mh0#RXBnFBqnaKJ^NXuFqKovCFc9!TBRv21mT)qr%ziZ@JRqT=TQ6my^0BJ zpP_q%{+iI*Z*KlSSyEjJ)(vBtR4kf-yIv* z$PQ$;tX?J))3%}&?K;&1EvSk=Neq2INMrRbLbH zO>0a3D3gLS1TAo#DO58=thci>m9x_KBEYAdkUH)k1E;Y$@HE2omUG&?2f-J!6B080 z1^%}0aV(f*Je3*J?Csp64~9#bY7e(bo&W9|{k-C=7TXmAke9LdYn5RCciQ0E?-(1J zI{X_xzw=fAEdmeU-3!xOq(mqQ4kF%_JPt4*wW|GoC1vzT-XBVu8Tz|gfff(in&?++3KG1u{J_U-$u+vi3ue9ssk$xm_kUngDL)w?0Lv)BXpVG%X%2I z)@ zxmb&VbFXcSj#_Kdmzk|@>4%x1&tuPcBTL`*LXziQ-68V8Ey$4hoeVA#zA-77qIJRC_T4kQm`C`a}clMwPcgyB_+2-(Un&jOxdqY96)tISzb! zrw1o+Q(<(H4>saH`r=QWFG^ph9!sjE;Hv2fDI?g#m@JW*3~ZxN18J7EYi>*OCC$*n z`ml=YAWHCEIvgr4zgaKUegy-b-%ytcDb!vY;A?!;p66XCc2l8o9jG<5%hs=JZy|YYx+a zNX-}|xF2Is$p~eU$B2QpHa1Z z+7qzMeANm0INu)897T-hBiG(nuZ@_kuZz(Wb^b0;q>gHf!?6i-LuSsFp?tR^cxJOV zMvvvNi(*HBxOB;l8b-$eN|MAfONhl6l;*1;7E>=)Mhnoud6*T6ARzYx8lEkVZ2G}-q?n(4(NUDQ6q(mKPOJL>h1BTdK1DJBPHczv__BgKmQj%s>D7-PY9~O zdD4x!m>aQSV*Ih*wW0gnAvV|4W3EYMc{n$XO#DTCkB>9L;Eu}1AsbB{(&3Uu+=3OF z(Wt5D8&BzjO&0MlGMy55$%+xy{;Gm1t|1Mi1bzBHn0xbZsQ$lyTw0}?b}bl1Ny#K3 zVTQL#ktQUSWh$hSlqF#n+EkR?B+HO3k$uTFqhy!KlAW=Qu@5uMK68F&>b>3H`@Zh$ z{`~j5j?2(>W^|p`>pYjo@;uJe@-%l%Uwl2Dwue!p&81Hv$fwaC_*q$jz{3s7=e=8T zG?0O#3<92_d_?bR*KBz7L$J)rls~860H_9z9u6QY^K7t;Mz#|m<}C#sdd>)bV=XB?LYzOS{TG-(G2>gxK;P=i_zJs$0x$Uw(IS~ z_Z%1XNVk^-N5Rv@8sZG;IQ+kv$r=B=rQpnY8F6}HGJl$8JEEJP!l;2wcO|cntpBast3WC zA?FQcsJ=g+e+&7J5i_dSs4wz}^T~D{@N>j;g$2UJ3Qqaq36Dh2+0ty6^5=TdmMxh% z9_{okQb$cjmM5mHUr1Eq4M4r>15M=im3-Ip*_qrzg~d-;st+v%Dh^hMp~pX`O&!EKqYW>*6mBf*Aa|A~@T>ej5&o z1Cj)z`E*ny&Xv20mLYJdPX48-kj~7t06X2kjxG!nMq<7+&TF~K>nX1#G&{&;n-YPP z=4Zmw++fO9z=veaRX*B6MS;PhrByT;7}}sornvH*)sF7#9V{1?4C6pNbq?3)JNLJ{>7~i` z276SI8v+9#KxXZUpdhLb9!{4vWs`g7+ac!erPj49Mwk(S5$6EdMyUHl8QE}|_V~FV zss{ZGe7Z$5WK0A5QsBW+#A|-LO#*1)xI$bWTa@4qG?1{OFNy*JUCcy7AL{YTZ-j#6 zf|yUJA=sep1^j!WXIQ<{BFjI;8^7!l8^n^#zm7$2^>&#XTNYm55O3HkA`Fv88S?0( z<%rd-VEeCyumu18_fb^SixIWc5Wj`6VjXLBAXjua zJA%pc;F5%ly#07*fvun*H!g~7TVI3*44{6Xp@B1&s@I6X&t-aJnqx(QI@+^@2TrAA zQ>q5J(z5Lm(WRjpL*NU)9QE`fcgAS5>AYalosrWN8HS+;`QXk(I#iy&V94_yP@c_j z>?lP)3TBROUb8Znu-V9mIM3VUU?8Vf{Q@U1w9}D-+=vG zV-6Wa7x+3QKzcMxtpU+Vn#WxQtCcinQTPtQK}7 zfuChw@X<>tH!8<>FBv`xf!~$)ZwG>A z!t0>EsiOZ0yWBHA3elCcL5HxJ%R=o1ZUI?7_W(bx<-@;FoZLiw4=_U?C(Vrl48(4% z7y$bfDZYauuC2HzAm^ck-*Jk~57WL!4LkBV9?bYk;L2=WE8m!+_|a%8gm)4F#{UNr z5VZ%%)-#Q`62W0mf7tra5p0;dpMXYuZ5H+~sNggz&GqjMsP}k-aRaa0OXNqa8 zLmK*V2O|X8NhpUFc_7)V{|VDB1p9)Y?gk^M^TzOQb2u19^8i;p$khql*7<~0(}t{` zVk9@xBY463)ZHPBLe!NbD--XylKJ5`5OQj z>8@|m6)BTYiRO)YVY-fwIDfB1W93%qki+?#HFyehr)GAm80O}IOwjJ|7 z4{-&A5s0eUyZ+kmAxomXKm8-WT_nH1H<1fou3wP0r4pvuyBbNq6&+2am)mpdOhKKD z<=+_PqG;I8@2bE~v_Kq3X#^@cKkg4orI3iFpf`RN|;))qrq44tHIGJ2a1m%O)4L?C|2cT9)A;2@ZoY z9=1(OsyiLzT^rPUJ5@?;o77FHWT7R20bYuL5PlLWJdl-DFrLbYVRtjGXmDe*{a1S~ z{)Up}`fxMyw9#yqSmZB8ffmJR{o&`eX@6W3D<5U4D6z3_#%Q5yfZ=xJ5J2Xgz%)#Z#kl%>BuDz6Mx->N~WM0W}sWxf;lV>8mLUeWi zK{EdZbJz*Ynm?EwnJX0QbJT!t_qF5(f$W3MCX!ZGBk5B4)nBS6P}f98aIaT8)KQ4K zok;URN8IQ1z7fRC=i<1f;Pn|sGy&xVFB^>+g9A?~MTf8WL2*^uPFK?@MHvOFW|M^) zL_7rX&9~7R&QR7l4fW~__&}$&laD*_X*eZZ_AGH?G<-jqh*hF^#Q`51OY^L~9GbpA za+42NRGXc`cC&K}zAf;-TdhdB>N2M_Fr z#uzi~@DI-TxVX49(J-YzU?ZXg7|U71(ff+4Q54!dm=Js_KF((z;S+>E+igoqST}Jc zmsg(4CuQCg$ECPuVDeZEeLw-lW#zq=z?2(%mOEpj^GMvM<9~TKemgjRe;-&B8o#e)kPnxX&GHE@k#=C- z=U&GEwE}L&5{11jlF6sgh&X*Nb$H#}64}Ei5*S<*`gQ8$;}*>xBZDWbiS$X?Sl6yj zQCsu}4;16Gwn^vx_*CD$y^J4U^n7k3xt(@4-1)Ov-djY*d_;Ii@Y$>&v|25TUFvBU zHmwu5jQ7@vlBpPg@zO5t4>g%vzOalFy0Rzmt9(BMGynaG1j*&ZDiY+iPN5whJ7pUR z2``NRW8D1l=ivtl>Ye5fK;_+!eT?Ag9RoL`($m z%T9KgG=lJ^tOoimR{;epBpg$?#d%a^5co^qC~g$~I=+*^Gp%Dm=nw4V zih65>Y}hy(TEFl3A={0v?#*1e)tpHtXkw_k{NZn9pbK-ixH{F7R7Y=9lv{F|nX1 zPKf$t@D>-o*|y{iF{%5u{Jk`nvb556p^il~47wit92)QCx&}=fMEtWhx6QgN`ZDyz z_HnL6F2^BAT~9qB3{?E@&i(P+-*TaAyK}(ni-OYOz564l-Z=lI=nO(=K{G2mPH)HE z?FM~u@U8k_RWK4f0y|vyQE{l1AF_VSof<;s;h!acAu1G2QRhcuEoV8wyNeCesD0?x zTdxDoiaN%2g9`n)yx~dQTR%q})hhbIYZnWXk_JLWbKY!kJ>Xc%A`|>V>x74bH2V)> zI)>SB{8SXd3$|$Jp|+GPtoBxdVjY_`$Mt8a?SoAvv-$;YUH3^0Rim6IEBIdh-+g5y zXip@Ls6jW#N}f~6^?HKxPq4LXbFg!A`q+kbi~*#fq98Hbv< z2X_h^!J#)iGe#+ny%sSIk`{DaV>*QB1K{gXX||t$P+>V@%nty?+qgOIgoq})plgQJ z#mx~kyZf*}{jj^pl~D>=LoBbCnI0nym9x;lDNVz0)+zq+S+V08+CwpO)NG6dR z@YaH0!~}&8og={OmnM_v1Uo4~2#?SG2)*V9n5jX8*Nbp&8>b2E>gi(_m z)%FPv_(R^o)uKA`dPwUCh?8F>%L}82($n^|LXT2S`>JT@^L-DZ2yGw0sY;a?feWV7sV?;?0(ZjuyTGg zLfMJSaHv7l;JSCro&#^kOxLQC4>BE0gpKI1mYAQ;!4`rGyFB)aU}=uuHG-_DnSw3m z^{yA*6>Ejc0fGxg|)qs5$9AN)7eHvw%CQu@OljxlD0-A3ru zd#~>eHe~vtdl8SEMau|z%UyEmIw3{lwqP?JGrG%kNr_NAombl`va2hdgZdbA{M?%6 zi-gdIKx1ylKy@h%!HucY_seshnyR(XFB*PwFP!9F@tAaXNHc8c{Juow{K}tN?3T|0 zmTq96L;PmO7jtL*TP?BE-@S$hngYEUerG@qih9WOl>Kw$Xyo7)7nN!+yP!7B3e@;{ zk%~v>z-mD~jhHC(^*|U;_ofRPka98e_szHwxH%|%js19g+9LKat*mMOC-Xg=OJ&;M ztH!|yJ|2~d+{ID?D8aLvNE6G{+exv1if8O*LG5I3P%Kz^uPziLFgE=*f|3NOQ93xP zhgHbI)fkb!`ut_rJ(>Wb#0;xhrMDLdbiy~WYNqLPdp^gdC_OIhHYkb%mntfaF9 z=;Th=R-79l2@l?yQMl}f?z|u|;>Enz#Go(54Vk7R4g>ZJN3st9s=to7g>QxUUMZgV zRzw{Y?Qf|J0UOZQ6jH5dC+v$~3a|*BM0kXZxbZI6NyA^X6`U+(lit{r6?+V&!^zWv zq@d|i=%YPd$xn9#;)9CDeLXPT3Ei(?@~;E6*CC8sfbq01sgb~z0wR$ZIBv|KIqEVb zKSc90YxW`mMIO z#z4rvn9!=R$l?d(-wl&`Su55zl2h453{!Ugk3#zoXv z5b8N(nczW_4kL8i@hf=m=q*4=R@Yi8oehg{i3j0Pr8oSeTzUd& zTi%izC+Bzyu4^{rL>sqH&>RNNaJ>8Qq+N^?Sb8+=Y$e~aR-Gk-+-}}(@7IU|()8Kh zy2|2T>Si~QF(Q*vREPjUv)`@or-ugoTWUcVRRCokqt4C>`l%{L+gdk`t|Lc*Ba;49 zGeaI4wBfHo!7*M3+i5Ljm%kqcKjD<|VnM{x5i&!6)hHe!a;ZQ(_oH>wY!{zJaaXx_L!nRV3j)Kn!k3Ov7{3G@X zn9SHarr>+g4rgGo!6n|EQ3j;)r{s6y-+*=my)mTwVX&s7YHW~ea6T8D*4+NI1UKXS zT`_n+y`W>@N5PtM!}=9Zp*uO(J|k)+TACi1*2zR?t~QE)K)Z18iRMnG{{n@6q-FUq zPvEXX(8;D>ZHXc;JX^Xz6gH-NuJ1evKSs@zog*xO?wE9!T=+45jNf@U|C%iqbs2j_Z*y{W%?cx6JgHX}zu+s2#>! zSyb7*C>Z=k{X4#}Ty1(ELhv(Z(XD9tuP#{|NG5c^M_@}i9eG=N&zW#!$v{E~>6=#o zsAu~$cuv0&EI-A_>a3&4d8vRSEj+X&p8B;ITZ8HYv!|+PMmTy0>IamL_|wOZW>Tz#Opk%!L|zD`)^8Xv1%0u z6JAM#Fn4&Xc~LC`Sq!`C)gSasKq=@|;2@#s^H`KIH?oo7UTGaEmwJ62H=;{3iXQiD z_FG-Q4;_TPzR7Zud~ymaQBDUbe&&PrM2~?8_VkH2mR~(0(6w>2q@GbanjYvCvpg@o z6i5HLP$>}Z@&h5;u}U*hKaPP6p-yq10$xJvbOR|naQGzwXrXL3_;9F)@H6d2pmU%F zAq{8}WnZQOmt=n}p0d^rHzTq5d#6V;Xd4i9*XG|sfti!Ic0U(Y=+GVlwtdEY(6j~2 zVa|ZOUtO@yO*^|*YaL2TM1HFolirN7z6~{nL_Xy04($m5xml5$J?Hd^9FYd z=YU&-t)lp8Owi5>W4?jfF_1~bPQPi=1(8V*?q?^&cqkDxDcanb5I=0j?_?^T)x#u_ zC&j8f3K-7Bsv1quU8{!@{hqq?OJ3t9@?Kgg7L}5hM3sMcbH9CF(x?ky#R63 z(8-k8r1kopY?L?${`){Ia(2trb><;&5NL03bBYANN)?eqGp0(q6aiv_pqZEL)~wHj zah)4Z)Dk*qCkpq_W7KIaJlXUX%~=Q#yB5Dr)hg^CF?)vq+nnvLv}2pJ4~ z|jZYtpe>n4oqD1g3I}3MFu+(Wx zzqp-26AdVPm|v>h!;g`EfU<;7H&h>If+AoTf&DDbltuTAoYx?feJdL|MH0+~_{Fd* z@#GVW59r2xZ+%XS7@a#0A05%61~I`J_Cd=xsQuWP5fgqkBPv2LO-9*%#pxm^x*VoS z$J0Tyy^u6@N^B{Q6j|$wJyiJ!8^LsGJ(!6KNG@<2fsG)|y-^0%6@64yVNIwV75BVWe)0%FrBi8#p48TWd+9$kP0ESU8 z2+-Ul@drtOU7GzSJtE`?knC0qEH=^DeFMraE&vN;B;b$0-gq!#TCLieJ^XH711=<+ zF^0>@qM9Bdc&YWx_%N8u{g+J^m0#D%XP4q?_wd3%qvu@ggU)TrjWUXEi#7MIZJMdx z94WPtP1U!Mj84?puReZ)QLy1y*QlZN=h2peI6>!?2$zFF7*qDkw-7UKhu!j0KW^}$ zE(@&5bfX1)pCe+a4^(Qc{=t98d<)a+j9(7*2<3CBBNq%nXd33wv8QXkN5w&|l8CF_ z57^S<1i};ZhK=cS*nU9P`J7H8o`U5><>bBfbME&7gR%n&M<@IE#W3yPjP)5ym7Zr< z>wVJ}5KaSzSL~7#M4uj>JlBRO94T|foZ~n3-Y^5bRKRhMsgtx2%T{g^Km%TX0%PQx zbWDfat5!W&XP#oW6_XqTsIMwL&+@J@Lf7O9-24EEKSq)VQ*hHgal9LH6~8s&to%U@ zP*-ToKpc|qwRRN`kg^1~MUb3-A*A=aSbEQmY0pajo0-9iKA9yxT~w^09FpgCjnD@X zyKR0CgF=;r@Ya*-3-O&XVo3D&;UnaiWNIE3b%s>ra96YSDW%OkBLQ@J!Upydp$rTH zEl`(7$jFUs2*}42yX2}d@`g7GLzxwIAm^U!sOG{EK1uaG)q*E@DbUYyBL`(boys(s zzhpo3WDy}au+k#hBT}=g1iZ!>C4;ekF^mBO3nT*kVy0)P<%1$_HBHZF#z<>SUS;43 zdH&mcIIf};|9Q0&vT9<>8595aPtgb9D;`ZUFB~VsY3F{#n@T}XHrRq$8ZvX#bC>hs zt!M0M?u2YJs23gl8_%dG8P)0Nu7Rd>D0kkMJlAKD@Qmt701KpMVVk>f!d+PJE*x_g zR#JJxR9>UIu*x0dQ_4wdl!=}WYFe4M!6S+;3iT@ltF=2D9x0%L4}eOj#lZm*-{TF) z6L_y@>(Z3K!e^i7fnO5c+|V8hnDV;1lQ<6TE044~-%)-=YN;blU09&)LYc*@fGmo5 zu&DPh&D?7F_h5tQ5Tp}C(pClM3cWq6EA9&)%rOHQIkU^}k2Lw*1Sjg+i22Pwc}(sa zjF@RFDZ2pDH0!_tG$Py4b9bN7)dUIK^R{8Y$-T|5o-L#iQhQo}yE|@sh_kepSisSG z^SsSFu&^F63PKFhIYG{Ab{g@{u~~!#(p9y)UkHc0wDHp+(bEw8Gz!)Q6xpIs*?@B? zvB);NMuh95IfWqrhoZb!FM#IU>Oq=FB&<3Z-Q!i5{@W`M3|PYRHF; ziA~Bs7+eYT5k|s(VtiAa3N%3n2Y2MBqw98BCZGrLjHrTKdtIgMVKhC0b@5{7vmxV* z+q!t2Ib4e~x-ne{iJnf6o~Ds#enc7+O+AF-Mv(a4zdfln|D zw+SU0!Efg^I}f5+(kRYXJe=P{#?F;D-HT?$($%8K=;!+~aLyUHn<_h#9h+^1jx`=ttA>jB#NO(Hz^=$LbM%IoW&PXM%~c-s;v>QrX~hP!Iu;9FY@s zE$so_iX{&(3A^u43LLhR;|Wej~$I9MD|ftH?-l`$p8`~RH8u@$JuCPTC9{A#s( znTK0cKto?U9(RU7N(B^#eCPsHSKtig9fid;{x!U#9dY;JgCYn`P&Z8mx}1IIL`8nl zeIjeWYd|TN0T!lkV4AOeP30vm&6!<7k{+js#v(}E@qCdt_$(qf?6jL`+>OWu{nmJj zU=$%5C5e&|JZ*}I*9FjF!d9q|1ay97_XP=n2c;r5m4}E9qJK+Pz?LKwpG3G4w;)x> z7W$Z%16upWPRuifep;pjW(BKI=OW15;+@GzY;Q{vj*N_5QrYLU7wX<$c>oF@Z_Tl7 zN}WF0=)8XJiO#%-IqjXt3?8=={#w^UnQ(AXmz+nV|^0p>^l{XT~ zoX%1b=(mE2p!L=WqLx}|uZ|qZPjMrAA3Kc#ZGTCt@on}wZ`1ExX)B@W?n)LLAb$M+ z)-ow8h2fsC#KCM%0`)CpoPVyvxcpxaTC!6#)n{KL-T2dzzb561W?$=2t#4vpz8)VI^0 zNkZFB!#AUa1K@mVL^y=N7#bDf?v{#}WXzlg0BR3;2tg+q5WobLWE{vgac13cjPV?R zmqQWs5QN|^;{+iPKM~xq2x{OVLW0`5^`}?7Z`tW2_Ys(fis~L> zPNoj`nYwXPM+!nP08H2)0hQdd@jv*Y>qHweJvwl4V;KTPVR%P1J_4Wi8u-|11X`9OK**0m+U+m3CvRM zG0R@04z+w0BcrK~7w(WXDgqPQFo79GKM`H;jhr{?rxiqeCD3?#iDNUc`jb_r18kr1`^i7SNoj^!pE=XvE$b5F+F&L-`^+ ztR059%N>y+amM*XI{!Svk=tlZbpMEB#!`5-Fn|HWjY5EV2+p;29`GvV;G>25%P0|S zUD4vQ6v~owGZ6O}UQeeq84(=7c}myyYX$aj)cN;wps#f*^)gx2&o1n%~%2jTPvzR5#m}3#`*=&O6W>t_MFAdhGYcX9?XJzeBEY zC|8I8p9Cx#MdyGukRX&=-UQS#NJ1WXchc43fE%TvKI#ZtVk3n{8_``9o%Yu{*}$Hl z7D1}G`I|%3q^mq|{ns2m;N0W)V{G^G_Dv)P{CZSEnyG!tHelQAU^O2T!_5QX& zWiBAYK-L_JXWZ6ksZgO{8=V#J4ehHBT)Ae;#cBVhN~t)7_M2+xgI%`O+@|@LwokBX zFTw%yn$>>C>eR9qia#Ki=RyWXzbkd1rS|G!)-PJ{ zaqIo)^56ps{)4X}%;_NqK-5r21iZcQ(0ufq2f>eNgjh66hvo~w9lP|ME@+_(noz=@ zDB-L)w4+otM6uKnU8W%S8~vwr3Q6~VFcv3Wwd0#C@%{?P3W%!-4fZp$Oo%=Eax>S% z?va8R7b>^)Z;Ehx;eMdJ8}7o3vw7z zI-NZ=9JXWBkB0>)F!=?cU+vrFBuZU+WT5(#ZKHn|C>|s^Fz8g>z@mNBS?VDOymJZr z!6@4)o@*P*NSE!Jm$z%s>*^ev=cy*H~G-37`J z)o&GN7|rvW6lv}B3J{rljN%4+xHT@pCqOZ{=&0vaf;*!io9~?M;ttC)o)oJ6Z09w4 z%hg2z4$>5au(wMT0Zh=ab2KauA{v4W3K|H4hFCYuw2d2)DR(OGA~>r2uLK7%N`&U> zts~XNxOQ`oXW9{8B`r}k5}q?tS-`RK+du!_;Qyx|IFB}Rx=A=j9v!%82Fy4EI9AK@ zs*fX6qXmnDo0gf+s9);1ym`y({ihvZDi61wa)7<89dw{;UOKtb@AW3#OBZK^1*c9K zs+iDoDctWEpoBR{w0nrRo6@;YX^zwJXlVupF>Z5}wB}=L58D*4i`VteQ;1Hu-kobr zK`;HZMwMJD>02n3JHBDrd-O!ZmNSxHA_znQKO-UszVvNVRkECMUUKDPgoQE`TLb-& zaAMK`ro^xRvEi{YKLcKLYJ0eS>b!+dPhbu<-Qg+ZO9W;tHz%LBET@~8_g?n)lg-a% zl&(W0EZT-v-oJ`(TzfnqL{BNSp?dWFlTexZv7h!nODi#BI-AD!G;Yk_=(Ggc$;r>j z&wKwS%`w=~_=HNjZ&W%Un-7EE&ck>%*x!K;hBc{`&pcc$-|cp|&nNZn$hVh7=Bt2_ zu{Fmf-}oyIfiFuT{;P945NSnSA8y~6wP`^~n_1D2O@b2p%cBG!p?sBb)u#I^WS9Mi zFVXi_L_Y)~QZWK1ktcQIc3-h;{p>djEG_;CTreC6l`o36?){Q|$iF@S(8qE@WnYas zK#)uIRWyV1PEF$&PJ^W~0o!mx`MaWJBQZ~L&!N2`szlM4)oP@$CP8b!KQMS?rK5BL zBV`dPHqgpSG}WuDK3TBPTX9n;Eu zb%@NDny zDR3rS{}ecWY{+26TMom>WcX!HBn4rle4N|Rc~U7O;> z!>(KV4B}@Z0xg7%$s7MCs&zgVu%`m&z7ZcS)Mg1^79 zeZa2zDWz&aTBCZGvgP{cT=e~D)`B$P zlWrEPwSJ)78zQIsa9wpEX<@w2jU;?uRQByn%)^NljU;;!k3$(fgN(T>!I%$SjUMyb zd?t0Z&w;3>X-!%+3sJfZw+BmXIN#cUqDrDl?Gh0*?7Fv_^lnGn*@Y`avzHMi0 zboFYTNHKvPZA*(Q5;x9EY!B@y{6xI)DI?*O)0>jQ5KYGfyIcNP^`Xk~g6yQiN{a`t z)+u2xHNsQVFXp~@eDRDX@dp34?qr?)!NA}(er@~Y^KExrc%a)@!?KKRY`^4t_U8t_ z{2WoL`z{2FZHHO10vLRXTcxNY!?OB=dGgmd9oyvd|K3E$)=A1&g^zqxx!UORLa&{4 zDh%98uvfHi{C`E%f4||s?!o`|Th)kv)nkUPO6?8vh3YH4bttsG2|o7N?ajW66PvD< z+}mRBJDFO700d0K{XXS#C&DN5*{);s0u9~>YWlm&V1 z&3qWHektYR_Ek=f3xG0An1SJ$-$nUO1oiGQvd{mh_^f09At%DTLc>RW6}=^6hd+u9 z*DPOeCb>p;-FYpq{9|Vp!W3ad|E)*-leZ|}Z#UT7Ya|(==lTQ8VD}gwOYSN)sI;AR z4KvD_Q9P$pc{%i%1%E8nXw*=~XT$aDJ%a8q8I)_Qk?up!fHQ!Qh5&qO)a=T#;P?7J zAHfQcM83(>TEst_E-?w*n9&yXch+A1cn|yN9I$=$Rq!@H9;Zl8{*|8ogNyk)p9Srb zTu=3|_<3AL6BP%hAFKHEwea#>&zWu&)q-FxrT=lS_di7R`p+q^o zDFudXTRN{W{!z+=32ft-LTbl!O2hM+rVT>>)n6>HU^b$JcuZpr&&k^LvqWCV-8-m< zL)VcqADyIUEJJ2qz22qiJD*#5v6>m2)}+wExu ztJZyX?e8!3@GiN8>fS@Z24UQI?K0$>33<$n^Ma#_y4s;lW zE1J2Q8$&JRkB*p!V0!{#@l#J`EYlx?SwhWX;g+&VUzIf}HL&m?zs=lDrFPe=V+yMd z=t{=tuS$4qfC8ULacYmm*|5>X!(JD5t$BZf)0T0OmC-I`GTXF)(L3;T;t=CRSoHV4 zK;%f*ymT?_0dE_R-oo40$Lhnr zh!ix={@3UkAikpSBr-FunK@eSO!G69JUly!+T4;9^5tI{>;GON1+08#V23fg(@Q!v zpzM4bid&+!YN6LO9WIGmnP0fp==nPCt;LDf^vgkAGgavc5ra} zeIl>?{H(>wf&ul3!vng=G+RQ)6k^rFJ7bXU5iBw7+4 ze~j3pFR8IIjwL&BsF?8hkepSI@%FF8^XKjmd}mCRkA_Qcj+Xg4#EL?AXt6uB=&;AVfxba5_`jT7fQU1%HIqnY>r4Aj=CP!sv zwoDyVI_Q3^*kXBK&if|jca}tSuR;Bl94RZWJ)J4D?^VGxgENO~4{HBaZY7E~-D*oY zJ9Ml6^Mj#1`4RtXytp8@o4Ezjz8^r z$JJE`M+1A!m3P{QTSQklDWcOsmwM^!SShnl{|t<^MmOC344_wFyYuyUd<7Q9bu-nuRG;62zR`sy?PZj*h4sCM$J zcPDzRncQ>w{;6sb?((MQ3sx6RZk`?bZ+rj4u4Ruez0-D^GdyHvG^Y8#g=}U(6&NR~ zgLi7^g*w5HET;W+a@EKa11tD`FS#!xb_G2uggGI==P(nFUJf~UDC6ttJAr85y={8S@v4ai zCwe5M5s5_Z|m-uNc%+lV~>U4tdxzWP|j{o2|x^jYo^3Ja6Y+j?KAxhV`?iH%-3E!seUp;6IyHHejF3GD+)qnl8m- z8-5s%|38)PzpISgdW9n%P&%;o%NlPjyTc1q3SD%_;%~t_r7-PUYRB~@5xPl61g0O2^+g5-Fn)m z@uT%xB#X*~AZLg69I}8$HNvTp9mWkAYDJk^yPOYZqVGTxI3}&J45#!#i%9LQli!v_ zuUcjx+aYzbX+!8db;Y#fy=4B&+6+!;p9FWdi;HzqVKF|L$%#d$jWZUe&T*nGmF}7eBQ9| zY|^>>2PSFxxn)0se;&Te|GAEso5MT+J`qJvf^p}s)f1N}(UL3Pf#vX{Gc*6Xeg29W zzYD%!zp36@k!BXV{U*6Kko>PMGWza{`?VjXt!DRJl5v&J`Q8Q>{V^7+<+|&Vy$|(> z*Hi~|u98iZx>Q~y$0(>n61Iep^nEyy)K+B#dP-r+V&|id;q;sV%MXEpNQBR1@m)Av z06~4zR-t*2mNhBj><3lCW zD~u`p;-o?9KY;pmG08dac^~!obJJ=dGR(V{f+xJ^Y_j zI}nnLs*f2rZFBKTU}2AXpmyb&Ta?u$DUF-Ware9Iyv+*VeV++s>KTO95m3txM86hs zCr<^Chz3>(7gLHqZb3be3XeL^nTP;Asm?t~oYhO@%VD>WvJxp3o?lI8&z#Ti4z+s} z+G}A<{K%2+J$w4W`V7pJ!lV2raf_DLZb}YIX-CXg%&)ujWXrW(dbb}C-=?$HZZOop zcHiCe#x}=4Y+gkAo|lO1g>{Cg6)8jZBuAWV+{3@^_vp6Yl)_So#Ev!mdK2f5sQk8P zdU_2OY5EQUtIc8YIcz%a!tS60F2Wia)YDRr>$*CUK@iE;yR|o9c#Be*pNg;Eq7X4d zbxwwxA;&I9Ie>-bb9&eK@D2&!omOB=+ibe_p3whseN<$qyi2r@v)#mM z0@jxKFuJ!Z$ozWw-pR|VDtq+zxBg(6E@kZ31FMO6=r;mw>WvdQx&~D{-0vtT7$7f;Kz5Nwx3+~mLG43eD;ppr`6AqS&6eb za@p&rRnJSe#(3`yyWE`T@efnf9=WF|Q$xv>{^s}BxV}AO0WpV!yp@!V`6-{^c~y&m zSDkIh)aO}U%340#?ptJ@7;I%6e!gbikMm_46>^AYqB+YM?+e%aOtou$#Ag?Ndi2W2 z;1cI7t}-=a*w^x%rP6?Z_Ohz>q=;_@4Mz1UFo_$_Fk7dSn;R7OT~?|LRdShGQ*k%c zqAn>Su`JT<=R!)@tBKty3m4RiL)2cJu)CWw@3l9>bawg=?T7Npj0|NG@ASJ~oG{dA z!@aH#=A$=J*vVz8{^Nxl1^mq;9lmxM4+o7Nf9c2-N|6AX6?d53+1Z4Z+f3_*H_U)0GISO0etCv5V z-PLL1RypxV0}S5xCsXm8<9G6@P%sDNzTHy=OBb3rpUqC(b2+bhs?noJN>`LychoGA zVSC0TY^|niXN3>vCrrC&Te{8j5{i$q;K-eeX^P5(eWzZ3x{P8?-uS3bAUowNkx%Jq z9dJTqW(jHUH&*4}A!}V{7L`3sh_`uuTZ8s=m>}G0&%I^)Rz2u;_s;&0@bZA9ZC4SdmS?ug!u0U@cIt=Kie?)u&*j3IxB2COKqKOU42u4 z>g$~nN`fWJ@QSeyptZ$ka!<}{tsm7vZ5N?hPTFRvGCrOS@~&Zu&m6bNyKY5=_TtsX z!k*kRwx?c%=}nsP4_&cn$VAQ8E9O-2Ze{Tlz21wC-FzqU#?UDLi^PtNDa-ICD=qe4 z;aOI#xqSAzbbL4Mq+z((Y&AZMXS{Zz(2ArQOGo&a`(FQX{zQj2*yi&Kt>Ck!y_Z;F z&nyPQpM+pND;<`px?X!EA${QZ;qz-`eJ7IC6`r}UTXgAh&Ry(&4{~nroy=!RMuD{s z3G46d$z?Pi3dFE_l#4%)zR~?kBjD_VI@QFNFKC0L;9@WGu3AI-KHbYoHqY*tm78?F zSDh*2XJ3ym>U?>4ytiZc2^+DF3}>I?Od3DjclQzhiqbm$>Rpy=&0F8PpZeM9Ty|vn z&~kI!8TyY^-goWeypZce5?d!je|2;O3}GxEvosg96U}- z5e<)TFCMzRB>(#ByF zaM$r;^Z}(~1tQHWY38^3)ygl9pHqbtoF=a?INc(pL3}576Pt+$de+*+EAe48D6cNo zETCrpM}b5a(^?Oo+5NC+rQDASF)1?)O?{Ha*c@Mkm#mM7?rgKNE6tU>+*@>K7mNS@v2~VVQT0)~C!|C`RJuh#T0pu)L_|t@=s{Y# zb4U@Sk?rw(eZls6q8W`ei-*cYlc|V*le1MBW<6+<0y8CBaKhGhywdN6lAy>_{K~7pk$*Aoa#9&oujf z<_wu=#-FWLcj2vksBGYdH+NQ*C~@2izMD1X)3MbDZS_g?7elpQ&s%%AbndSOOh>Bx z>rgQwZBgw;slW8CKZ4fyb7DC-zHa+q_qd|84%2b;$LA`^Ms`541OYPR1&ciFX%13xrdM!(EG(XR2rw%v^$)%fT!h){jb8 zcea|z1DA{D1a7~Db!Rx?rt_v3^K7rKXBBi!|Mi?H{j6J9J3XKjON;lOEDA zqtq%{Vyn`rG=E)rKbE~MO(hSXzUBY;BqoK6Uk(XYPq?`+db4iPB2Mf*PVmPE6}>}4 zAHq9=%Ik> z_Q{r6uPECgPn9&q)pDD5)-Z^V4O2fN^{P~lAN{QvWG6}u7t zb`x;WWNgv;^jPdw;@a(CA`hhHIpHb6|Nqua=SEW$y>K)VyE|7|^~2@JV_Tt=26IWa zp@WDkpTn1&{`s_LkFfRTjN^4*Zuw$SV^c=(p!o5(U=~XhSgN_TbwyL}C|sZm3DKnnRZ+R&>t@XlecW1JXzwT2Yi|LpVh>|~$#YY}#p~$k5;tKg}UL9x!S_xG>7ER*A*(4+r z+pbXhH5B~FVD`-*p+SsbDt@8>g9xv|w-;7<5mwVS&uWlT(W9Bqed)+HHceV-tr_-o zrk5z^m%~^IBAU5apSTqo_lcT6?SX7Q*w&yByvC2MF z-N6V!a)hsM?)n~R)z(bc3;n2A3rkpWxqPy9kqBfDe~s4zLUi(I@CEYT{p6a&N;-F@ zgVGD#K|G4Nf{0zkIho9X%3A&77=?e6<0}%2HL*VYF-E^p4MipvXS?xlPBLA z#4GhWHFVv9+3^*>#%hi~Jbu(UnIG#diqDZsSc0G*0OLxX-Z&F1O zN8j@#AUI9v9|0ZS_BH4oxHezi{LV@(ZjSxNYZRRty>{}~VoFOd9n+cRS z=Y#n~MdI)wGWkSqhQTCWR$}6uR(4c2gbo3vKqN}s#s27kWEbWa_!mz!YqO^FRa!u| zMRnw|`)3z58J}Hj{sLLwm>y^`YrY=PZDnbnj_Q4)Fw zpXg$Z2?TeP^lsF0Qct@M%6#wK>0)NEP(QeLkiKo0(nMtz^Y;&4Xnzjgz(}(rE4D^5mA)WD%xXLs(U9Tqv!XCiC709F zq*+G&*1wD;XSE4zx;Z}tfRX8Mhl{7j_00+TU#e7krVVBktR#8Z-OPW`r+dDL#A9+l z{RYz9WQ%U`Ud%c^R#bVMwO3fSkRuO+@>`H6%>^IKMnHHriOe}nm%*ESnC?t3#RrCG zmpF%>ToFtx*L>S!vO?~`GnR7giq=cc%*2_f+(>c277T zU!&^$O(O!dU@bSh1`(o{L79_10K@b94vB0#nBb)#=1F}v61i7(7i3vgw~ zsQP>j6zy(ju(>{6a$>>j9?tXqEr=f^LiB9Ea`o@tstVeW6(?BTyK(11cCltju z_u%}MJ2|aSn4q4@dU$6YR4$8jaq+s&bG8%m{F{5dA{Ub?tHG=#uUB}DP(1<9><`*= zrc}pYrAbOYK_vei1ioDazBkz5Ibijj!Gcw7guiL+A|ioVVFFQ>SafHKFaO1wFMo!I z+N548YfCW+p4hw57u}&GO+`u4^ZHjwO;B?WS9YC-{bfNg?((F@sjT(l(n_Ql<4eCylWTD)i`d3+L`ZPvrbTYDvq z!^7UWZ(NVl>pU_LvhMv(rN~7x9+U4tU^(Q_3$PzyGi-hr*R@gPaIfEPXYeRqz>+OE zDvbW9I$V<68cv06k7eS1?7KAp+!Tza24c)7q))Am z^`g~$Gw`W|Hqsz*0f0tjctZX*uVi;?&Uy>5Pws9mLPp|%oN?K$pVJCWKI!ext=!4F zL=xanu2G$O*|h)=F)+8SROrzJd+nm-6@&lT=FQ+FqfY?xLA`h_sepI41Grr4cM@UW zE$AEp>#PeIVNu%5CvuNiuQsbU3g)OB-_oL!ttRS`BI%9c-Qud|1t2HLnLqh zT2hlU)fO{v>^DAXkJ`9~IaZi;GA3I-vpPErC7KR_Hcw_7dL3zyOg4r6BX7#gXn}IX zD^AdLU&Cvo$s@C)fg%ePgLEheAE=JHPUb0%Nk4{n;Da*=YL|%7K{p_E8|;(yEveuA z8+L0jGD`3J!3@r`t6T+7D~_V3pCU0A);B1W$WX#6;Z3*tE}3H9HpKE0v6 zz!2?+0W%>Iy%S;#J0yw_Nqo2Y-x>`7bR+gC!a2rVV=x|4m?Zw}-B~V!g*?+vf@4AS zjt^NLW{Epqcua$8nurzc`L2Zokrzn}tsgL%vrZ~3ync9KI zxHrs=S&@zo85t@cn)h>OBjYJAeq|m#j`O_=KWH2Ou{$D$oD9ZO)ULImx;$Ludt1IF z_myBLK#8M|XfT78BP8*J_h~GMFq$@Qp+^o|QNCz76;xB5s&VD;o%Xv&*9)LEX4YD7Xr_K(XhE@|0D}mAm#d*bW+{h zZemQy-^RroEG(TVz=3#94JFQLiaJpE^_iW+?QVtHCxB#JBtg~%4BX0c2%sBVj}-AS zwiB%UqbLntr333Eve9omOZo3j^;4zY&V;fJqoEt@VH? zZckarmEmA*_9st=icJ_k)Qew`ZMj-)*4^K@;E8+2(s`mo2YqSyW15IOYz~==DTW9K zRVzKYXS0B&UiT!MXBHOu&;jp&m#&i1i`aoT(2E-N3pKQK(90ZzW|@`*w;F555Bk*dP@h3@^+VGKJW=+8y}59g7aeU1Zh zn(5NzX7c?MmSqx%MhrCr1W6B9uP_|aJaNmEM&eH5GJ@P_gqS^m1n+e<}1>P&J#eWp2A*GV5@N+~GNKQW| zkIdXP+b{=uQ@Y`c-v*hv52wr-BwN+w7f_rHi67Rj%RSU6jU0JDG+s~FW--rt95utd zkQc?yp!M!BJlGFB+!-B*Ax~Z0De}aK{^k42T4w@Rdp#IB!J>_Dk$ybqjA_o~g-+~! zAdS~78c0h+P50*r^3AX`B>LudRFa_E0knKWp+$p>QntW!WefE@l}R0P+8Jj!PBX3F zbeEz!YC5ZdVBKeahOp_`!4pkmi(0pTjG&!bGyIJIBAg| zQBw8=E|##Zw?;4~Uc-bRiVeG(nqeA1vXZip{7b$O3;vb8@Z7A~#1T=bXUr!>(TPch_(FU^3w!x>m-bD^@BL= zj^ah1mljRH-VL3hlNGdPB7HR~aNAP|#kZ*a^GEbdJ@-$jkK1U^QQjD%axA5QcD@IS z&ApG~=C1I^-}sO(zeA@+vGY4@zQcdKW}F#0SvWGT_Brq-faA2cSM1UVSNG9q-u;jy zfoK))G657aeJosdTVz~m3y#0ckUnFarrSgNv8Bb)!a%fAU(y|)w=1wTbYjTI8j&I> zyeMGu6=9@x*Yx4mt+ad9W`Pe^RA^KE;B8@)>v|#QSf|*VxcCLuRUQ2^jVHRi^--pEJakdvx+U?%lqCvDpYCOmyr;26aB2I_kOg?H6LYae)nG4 zth(65R7V(wSEIz$Q0+5C+Uz_IUS9h8VTx!OKIYK9(RzQAe0)Bk7(hr5n#;4kA)@(!<>Fd7aA2(4n1;9_ss-! zFtIpRP^*RF5HO4|ZtREAK?1n{5`t~N0{`lSC*dcSsjz6#&cQX zty71ThS@#=&skl)ahM(~1H7%toSkRv1O3z9*L(Wwf~_0BLSPg&O=Gm{sbUZlQsjE) zn?g-(4_8as=}rr_BwmktT+fbL=cPHdc#r$}ye0dSdtSX=##mkGoYS1qbmwTbp)hXn zH}%~6?!Eg2LwQr@Qn!wioHRrQ#ku3zUmI7<6tgIOJ9)Kx2sBI5btp>CHOmJaI zgOKCFIPd)(o;RdUP()X`xBy6x|D5d@%dIPZmRPVfQ4dV`#i+xGC=2I<}W4AlX+3A0LfD_Rzk$93{rd_@(pDGaQcXocq@_Tu zhghJ<-sn0NHJf@q++A6OjXEz_k${XivkAmpms`+r-3pcs0;w#cLNis_67{_AoL29V zN1U1(!EOM<^T0(T){&o^R`9i01<3Gtjs6RQKt}&V zmqCO7nix93ZhoLhC2An0UilbTTsTMyACCmON(909nZpebt7jcP=w!ENGAe?UWt*jn zzz)yot#o|dZ^^rZdLNDK8Gp@0*T@_^C!j@slhwRj?GtmmkiMLv*`-ykHkR99$h0G4 z?Qic9%kM6&`DUu7gvH#Dt#75OPG#@JD8$v86`mO)Nkv~OlwBdENrH|(kv>UH%_QMZ zOhcWnJT3E*Q}>sO$6PGO^RN$^R%PsN^O7+DPLYWv=vtwucNfP|O`;D`_1G1hV7P3*Frw_``v#q_Ogw@fN<*^d>cm6G z!`&VDZ0j`1A2mpX#|eOAgUva2Sa=_stp@v*e(fA73m2U0ZS+N>BK?)0J zrmIVwOy5nHDW2yjK%ev7Yvvv&^9l#TYj|X#kGHGbi2qgYV1tAR=(b>29B+^ zp(E#PJnln@LniY?N>Sp-na$tP5rEC#+3HsR+sZ#B%!8uD1+F%Gs_BV{a73GN{ZN~KcQvdb<@73{73w$z_C>IGjy;}OE9D7U}a{BN)9vu3IYJ=Om6fjno$wg(3B5< z@6awocY>{qXQsqpe6iZ{Dw*bfi`?T=%95QuP5m?t0q!;4&$_T)-1va2BSBF|>$hVi z6K+RFn%~~-IN315R20R@tXr<(%DyJA^I!@t~*{!#d z1j27`0ZGh&loAJ~Wll$nwfX%qX(hKCz4dXynj+BDILa&@;JEsKkxu$Ew0srBO1u9W zCH`N*_uXk)lgYAn>GGNna08&W*PHQM1J!-KZen=g4ACo`Fp32~ndiG(5EnJbDN0;H zWFMj$2b|FbFvttmOiXH}j;J#n1*mMS#Z}7N^VJrp7TyjqrK!(-F(-v*=Sk48MqVGGE%`-!stc$ggOl8J8PT5`l;+ z747--2>1D3v5R~ND|}%fckt_BKXu5+xXkJFeio|}4U`ND^Nj{Enj@&i& zSGE7 z2H>t9}f3eky`L7cVyd(`N3r&o}VN={P-d+*r-6u_A))Vm#!D`*!lY5>^BQ zY-+f|O?x9MVAK?qEwCEScy=}-9y0jj1~jF9B%C4LGuoh(Nokvq8&Zc0ia*GPc$y~_ zX7^G|Au2{)?W*5>{NZ^1`kmPK{K~EGxF7FG#gd1w-Y@-6sKxAUML54f{LuEoxlHi^ z)ECJimDwF}mqBXmit)Ip+&@unFg}2JV(UlcQ5vBbRUc?iVJOamQs`((=BYB$H!esi7-l@t|I^p;IDCdk5I!4qa%Y!{>zS15XISh9%qV2XWWO;P!f#9x9hm z0=KDX8ZQK0>ssK^KaQ0$_Hi-xX6t))npU1O{gi$XdFAcL%dli2JZ_(GlF* zecO4!@DWy#F{VQ+FLp+W$Q6>r+q)>#kmBP7k_6aI3MKMN{o}SJs-1XH|HkfD^P;jo z+yELE5QAhNp3`uml)rtaMJ8)l1Cq|@c8dl2waxS9=^(i2P#VP#$gQF4b*A0r!WZHi z5Mb}xPK9R>hKEj#?h87=3Zb_z^blanPS2Wyx(fTNX@k9s#sFg>qvruVdJkfUy~<%p zhx+V_It%@OM__ zuR{`0+H#}sY4*_1TKb|Y_f07ZvAWRSXog|S5)i5;x0HTOB-+_-4I-% zxhq~75YEj*JmL|pJ!;J;X46HQv-ShU9qxO@B(p7E-Jv@t7*mmSir>dFy|J(Uc$CU@ z#*p~`&D#d!cP00xi(wxrtSG0oEQ(!Q{-S`#a+bxV?ZXrR~KJ+b@czA>-*KuYo!vz!SpRn=F%fMHSZ;1Q3! z;YUwt1V+(7KPKsX0;oW8Bf$A+gvzE5YViYxSq#GINoF5c4R!RuUG3mxrmCu1_?7^A zL$rlINYZkDvnQaz{IuddaobnnG7(TYIxhELs$p`7CyI=xLN_FlgnJ~3&q|Aw$0T&< zxpwk;|F?{4!E#TVVTsuU-ojl|i$_GI_3$L6qaecN`S8f)?`%F@z)_=FhmN~$7=8}e zt36A`>YB!CxV?JQa2NVP)a<9Y@L&4~EC>()8vt{WT>7`|o z??dL&GlBDHRMCtIc!s9DxRA^G*%Dh0lM>UCKl{ukO&XiZCPXQug8}b2+A!pm{*);1 zy{c<=xysKlL@?LVfA-BMC;EyqP)=M&l)pGUb$(pidRN@P5>YuU#9CA{zk8B~i(Hfi z%+G_GGs6MbgG`goAi_C_ZO&US`{6ikYr%o|E{}kniGx)W-WTYg{rlG*!xU@bzxG)) zgQxX8sF2B`g6ejM2o?eGLrbjsba#8qR^++={hOYx`9$H`-L2M8yDlP)VDE)nE8B>i z))8fhUD`ig#0oZ>z@u@LIPcr_qiYo63oyX){S@v|N)vHYo&{n#RiX)nRG}_Gb_dtA zE-%Dt;EAT5ZzR!%k1l0f$8EJ#2r-{Hg5^Q(*EL6D<*`VtAmOI|?HUQ!-SWddiIpmU ze4FN-M(d4QiZ<|_JN>^-^-v$Ou55^Jq1*cI{;GArCE~=+#_!KuO(DaG;Lh_i2eb;6 zuL{FFvfF?mfD1SlvV~{YYxmEa%K8|SJFlN9Tmk5eRg5u*ROBe|a8n*(`~jX%7N>C^ zx7i!ug<|ekhg5%niz%=?LXkQmXNQ7&rP<_f4WN%eTg2XhibV+?F`pAH^HZi=9T)G0 zoqbgvUMehYAuli3okIYgIBB`2RrS=`?XUVZz*9Fu<%Shf(m2SbL7ta&q{LX5_D0ef z1Q4m0r6*a6$$C?}u6Q*%mxd&q?CW-VpbeJ>d39SXgrSZPC zYqYWa=FKYpL;T@-MD3@PmwaiXD$Z3%3c8;`9US|q3RD)O%$8ulX{3>Kn0^a|5Ot-xRD3~);C;nwm6;J7oW?T6~{_940{~xn> zm&dS(pwvPDA2LOW*Y}c&S#2I=h}ThmLz?nTL(6=#cfn~!ckPNOK=g7JcCUA{X*|&y z?Te1pjdWrG?4{u2?aT=HW?h7O+sXiE>xg~(lbn^;Y#~QXz`TnUnK<))51h)*M;!z2`r7mBgiG4asDSKZN`v@LQ_t&%e zV+HtCKS##0lj^w}-@eE7#v<14J*-(sr~@|ny$%svVMKv?qVc*8pq+I4NOGd85-Xne zj$^jWPXHFql2M)&{rblC2X(5QZI;EQ`A<>p@@Klku45K$>gZXY zs9>uYmX3=`9khNu`SzKkMQHOT6|{{(;GmB(hkmlPiPhgk%8{; zO`*gYC1OSq9(Fk|W(Tv^%C(WnUHLMwA-`g|H3i-~(znsFqM}w` zdi%y>djA-B45hK|^5Kz;{R40wO?maI5i?4?D4!P_2y?5Xk&r36zk%>1yR(Yhu(P2X zGUOyfWx-_i3KEA?$T_1v6+8Y@#U#Mgk|gfxfuGK?+J^{D0~;)3E`e1BPA2ipO|kzx zA7)!z{PhB;GW_?Kgs;kbs6FNfKIXV(?*PZ=lOnU&mc4?>+RLWb3y08e>nl@~apA$5+b_UdnItd~wX$nj^GP{9)apATLnU`Ec&1{IE@9F`zXP>BZ0D*3$9zY3w?q z#`1AY6Yj2#DEy_dx!Va1&z3FIonNft zkUaoBRpzlj2DwfBrVXqpu?Ah%y5-|>J78-E2|>NR%$~6Pkj^x3BBg?$^a5?>OQf@u4Y@G<}?YLn_x$|-uBnR-AeT$<%&1drM5!c+H ztnUuv5?B`z3O*|wNP&l^pL}_yZby^ga?ZQVx!q@1z4Q^CTtg8p%2rI_P)aX08^Y=3 zE#*SYX3J8diu#3~Tc;sJ#a^qDvm5`Kjjy_T&6A6xC8uv@;vPC?GZ~}I5jngW9Vl@{ zUGn@(q-kC^JD-Pe>HxC}_iTpd@*x=)JZBe31vpa&<|*9CvQRRr9%YQZqDpIlpF|#3 zDZpHR^o}=6aY@Vw8pwTf*iLg1vUv=%VoG|}&e)@cGW-!v8f-0A=Y>GZ`5R4ZmnsU> zJ+x;SGWp#WZ#ggH`%UD?S9=t*vK0G;s^|f15e$>U`l(j!H>wdFrl39I+#$g5&%e1@Vdbm~;)NAE~RmdmeM;-ltrEU9a zs+4Cs5RCAzY@nwCf1m-+LODJ;-+pWzwi4Sb8j;plLG%oicct~+hrU829N*sp^S@&m zX;Oi-f-yYH-YdRX^aMBlz7>(W--@{iKrgrhl-q<|YDqI`VS2aG#X5G(>D%{Z19i9342BR$x%4+b~ZEy}f(7rol6q_|*n8)2~z!N2PoX=5{IX}x|*f9#qORGvGExV|uL&HR)g z0yiB_u$Exs3^XWhF=5S~6G{A`SzV!N3Wo2R6_$Lgj3sY-ozEK*fsMb#D>#2A_CvK;59y&u(cpYEq4M1`c;rp zyqxa0H-Kd5fu~?@gs9xW%-UU3XVbs)l^`R+ym*v23Ah;%G$3*|WuCH+Ne(fFCV)BL zrI@tOE%tgzw?EwP9vTY9Uov_BioZD^Bk5@^Bkv8bA~DG!R~#+muWuB(JOA)eA&tkrd{@mjpu>`!)Y}= zu5gJFNP1_Mxb6>`<7YErL&xpW{I7vs^XI^oHr#J8-H*0pO098zIKAN44}2b8nsD@4 zzt!t*FyCx12uJwgjj2f&uQM3vib6OWUR~aqJA7{f42>zaoI7^cjaqGM^Hk2-cV#eE zjPE4a+N&KQ9FGUI(pM+NWkl&-saUyms}q06w}&9r zAC;A{Txy!8rZ$$~mWsbgwLmo&DV=n1E)y6}dB$Jeh5clEP^S|r9#J$Hye-h$Wm;n% zDDrP*6hOm$;tSM$9V3UwXqp*-mBfAs2e2dX!e*I8?41$6F?{ue@FBvi}preG^nOekJ%zO8d_BrMJL3K^yE7L zS4hp4Q?hLMG3$Ansqmv0Z5@ZAY`Zba!F|B68>Ne?#@$~+Ndn=o#+De@kS624Klm+eNtmO^TJ4wN_5(Y!o>#XTgvk9xF)`w1Gd{FyA&-{%TPMEweo@Zb zalvlnD)*6MzFB@~2}M22-c_c?HNCr;X&n})PgmF~D?o{>0_=xW)p~C~_;Bj;)MqMW z!x(&;W`1C@pwt{{$Xkz(C%}xzJnwaBmCRu7Ol^tMVc+Gv#Sv(vkv&B@M8?n;iaGIO zKurT!D6l(vBJ_`o{}-%YA;RxP2fciv=5>5aUXb5v^`fLJ@SN4hSWlkB8fAcdy4fBL zlmjxM7e4OUY8MUk<2nB-eS+Tmu8Ecw+WflrG%W8;hbdI3{}&wr6#aK7-gyTs$1&Gw zHkYGXk*u+bK9)*(YD}Ra3P{azL!Vf^#k@eL`lbkd&0p^C-Us4?%gD}25oEjLy361x9$gtfCZqth+u{L^L_lu>uRnj>~}UAyDp1V-@#F_0vaXoeUKe?pSfM z?oN23N&MCL20~at#`JG4JHq30UsTNNj6{WSo}KC>&EtwbfAx!=_&q7Fp|gN>XF`!q z&q(1-Ew-pIx?;Ey_xwzDrdKjV?@7;aAu1b%?%`%8rXPA&?fQPeF5U#|qrJ#IXVAiE zR$;R}UuDzNFtYPJXdEz#HXS96Urx#CJat3Nu-(Ab?*K~@wYEmA?#h^H7kv_U<-L=* zK#A+xJ$E;y@|8mIMGPfg_#aJtYxTx$2`@Yl){5ZEO}ji;m~*kuiC=!}wU8GgH-3I4 zeHr5Q@YMfYmj*Y-aePB&m0H`$va@zsO8v$cZ{H+_m53X6?{!}b_c2S%mjYh)P!wXP z(}APh?@Y@#bfNd=A3?wthSl0VM;!goq_2%tp?Ex|BY3ShZn?(;yh4FF^1s}C$+yOV z*0X)?^BF2sd7 zs$GJ8W-T@<9)L;JJYP(Cbv^IA>8(xE$q&I_qNE?g$caX9@!bJ*GPRgI<)F-dN&dAJKf%lObrPE{-M*Cp71iKih zOTeLmxzg>H$ZjiH>n${Q8}I;NRg4E6Kal$7wGk&jp>)#yXrhQ2Ak{#mKI}wM?Ih~K2c3y+GFHBw2B!Zpi z&3gn0a@er;8XlEB?R?{jINtX0Dq6C5Yn>w6(*)pSXN>?0r7mW+Wa6fF%qLPhWgAPYT_2SJD@NrJcz_J_I~whAzS0&H^*uIJpPMUiY&YMcGz>^V8S+=a@v zc;$av1!Qa+yGIBXWDYwe|o}zLnztR*)hJzpA-|Ux&j^tn| z_W%;Z6`C9XYz~-P9=18v{e%vx6W2A4RWqd8x&>r(*cAnGzf$o@L+%=2+~RLRp%`{} zWZbVFu4;$)ys`HS9%r|kJ!cG!K>b|)J2;}jGtf37Kh^&J{%W1&;2so^&oUvPBeh=y62W9wgiD)1qOx$Kq0UTZPzR@7Q_7P?4 zCgw9C3}q@~kEECcTrnSQu*6lPS;wu)(2F55T? zS;9u13iUC@Q}n4mDH6{OM~QqkVP?=q7qC`s{u$+akG_}mg0A_Hja6nf3L`Um|!Q2anykY8~Im4*q>QU zVSdTYUYlXm;&Mv(*6Ktiq^(CJbNzUEdANA@9s{FI`A)BLE8k<$(bf2+os_d7O}K^g zcjma#x}`kwlg#x|y_?Ox1@sGTG(aag-d0p9=#S!>-;OcX@bJAar}f%**q6IJB`z8Q^JC~u0SK`ad2#OObXs(Xnz1OeWV4DM}9$=5rSHaIy zU$VtCdUMp&Hd(VQ;wJ`vh4C{6HGA!xHwXPHO|#8%zZ$?lYqfA;TE}TAjJ4O6N0V^&OxQ^ zx^S=>hlQXLvbxq<#0!#kG>)rhdI341p;NvOzBaen!$_M@ER3M0hv%utlWlff}D@VIwuR>BcA`A>L5*3x2aqGQI+2u>h>pvhcj429kI?p z=KSH&?5vKSl;S@ii*MKCztb9IB8Uuu#A$1mnFk~bQWvsJ8FCXSws%q__#H`8w?J8h zNdktQ`44dNFu4xdt;Hk~h&mW>49hhX4WqIFHoA`EXQ9oQXc&pUXH>1?D3$~fg*Et& zhh6~rG-j|e6gZ*9#av!K6?7t=2O_AyU~!m`EgaGMfP4j?+xec#3M}Jm_d|*M8yM}< zk@}>g{TFo9GIEn^G7FA2otz#2Bax*m7{@`nkuWf z$zX(mdu6ymrhf^(vE@t=g_JdiL#^*gL5%~UOX8|uWrOQO;zWw>h0c`&OuH6JO0Gz0 za0cJi$5fxnCvE%Hco-oFH%o5R1Gm2$vf|H*@8ETAeR*?tEfN_Dqt#wSfSmOys098ZIKl zAjIQ`3Yq-e27pHRi#>oUAERUy=fLMYndnN65QGOlo9^ag%E_oj^5vk>nJGhH#FzfvO4On6gIxc|4 zZ|5l%kq+D*?sOD~@lSkVT*-xw2IRb?D!p z#wQ%jlws$e6|fVz#&(<*Zn$-clRQvz4TvKD6X_6e~3hp$h+vgbTuALm$-EK7XDVSVa4z4 zKyzS%Wm*8xedLmxe*eV5ZD^7{NK(HE3O`rs#s@WD@-+S@xwM8t?TwyzM9q#^1wyVBO4 zc!{F2i0L-R6rsEEiP<5Y9uVnb4WH;XyQDGwA`DZ`KZgtTv1ww`**Kj7q4F<4M{t4XKb2Z`sOZ0v zr0C1GGLp2fn!w1u|Mc-)W{6O~4$8~9ECt9%oAS`}F?`K=nfTLVH7tVnBv#BS@w;AA zDSx!iY{TN$@nq1|4~dh;@b;uMLyJ&A4jAbg>fxNqh7t7i{asUUq9i)S+)~LGHUx@Z ze;SgbP+H~$M$fOX9-3n@%F@v+-hI$Y*;3BimbrHv^G3{pe?RAz9Ly7ugQ^i}w6fOpT?GU;HZiRFYdJxcoTgAsdanQ7mRsOi)W0G%u zSa)$71~VoS0nlc0-KpI@37tm1{)8o)c}SBFFLOJ8b!-omM<>w80IMu-pwhA@_U!2H z?XAI`amUBPnMI|-40I6ovFl-d2E2E+m$EnRXQBVaeqwW$$}+Glh46CD^l1ADgI<0N zg@igDJ<9ve;Hg{c_f6mpsRA=EG>|Ky8}L}lsOc;zw$6OjbDrC@>*DU$(6KX?XzK+g z^{qJHg!dic`#&k%wkq#}8=a}@q73jahXxIsX&oqr0h+|L@mlmtR|2p(FaJ8e;LTsa ziE2cdPLJ}B=h;w{8fDx2bcF_1e9nlfU242G;58xF4)>H7`}I26v`Ik1)T5r}HKq6V z@WsuQ_-kG&{owMO+MxKKBzmB2L~n4wqm}{La1#?ErV z?bI}ZB>Lo9C~#nS<> zDq+E#sF+KFv-@#@!q&A^pkOpm|JE=blBUetOB!c>CDN&}?^FjjR}daP3Phlm!r4{f z4n)qD%sD&?;`BxLmC!C-<%Ib6c35%AHer`XjaMzU&>h*IQ{M>$()EqXpD(*CLz2}O z>f&+Zb?kqh^dES^?7r2%q zaCo$waFZ`v=iPDVx=gNO=Fa+D3AGbh1+NCjzgM)9WI0q^=KflW|MA9iMg0AoqJE(D zQUeHbz>Ev#!V+sdB-r%^JMIEwO2uo|e1X(AwRL{{T9rP(HrH7eipV_^b+wnQ_ed{1lUAmKQ%{O&^S$`Jw5g~-)2K!smH!=0jra0{d(>HkoDg2RR90~e@KcVnc1T< zI>^pCLI~xA%CT1nAtQSxdxh*cSt)z(nY~x`-j01Za&S1`hxhyadcQxv%kPi=a=CPP zJ|E|Ce>`sY+wFP>i~BW;!k4Q9I}>R>XADl)hHMymkIR=0xdL%O+ukne={EviMAzhP zPSk`67;M3jN_)qdBa`L)UvUhOGCe%#-v1Wke&^Z1qeSOfZ*S^n5^p<~tE;QDC(fLc zNla^r??~FcyYG!ZSF7*PS6Bw}%;5W&Mppc?%fGsDT}F2mVU>mEs2+ zvB&`1BR_YdXUlAn%Wlfse})PT{`MXNeVWTfB&B=wo&mQ{R*lotDo~hqsoy%d`)*X( znH;Y6r;x0VUn=8RDVjq)e9nYOdqyOkwnbL#;m(cUb0F1YocMi9C}FKvaDelAjUoRJ zP~F((MLii@0+3!LM8~JRjbzb52z|n3Je>?KW!B${xGc zIcPc09;H7=&F8&;6+4EOcx!a6s3`Ov$uHC6Xn%I4#z0~#VwLTH9KD#~*$j2AhS~{6 z3grQl?s!QFfvj5EVDEIEre>R>^84Tl%wx>^-$sOxBtAgb{5~H7QvUS5AG{UP>8*HC zaWpG+8QT5jfB~(E$=owO7OJoDm zL__ezllaQfZ35e9mAgeNnSo#3@E{WHA@`aVa`Sn)vvMdF%A%lX3i~IF2RRyA=W?kv z#_nI!{#-kMjkAEIOd0tJcmz?Nec2v)*-H^75jWY2sQHU!ge{205YS!KI^RB~hJNEWxYAM72(zwNSz7r{zs~Z(K zltixE%nc-r7_MH=o-!2M0;I6b4faI~1< zT?6qEZwXqJ0+Ae6gAg+voL7~b`mY@Mq-^FoG*K+o$KjwC-!#n!)@nxq*aR7aOmVnM zedDVAJW|QvfT3aU&>;QfIa}h}Loggm?eDv3RGMFXZ#Sn`#`L($?z-f0+l%4Ou=c$p z^l@Pr!v3zBWgbT7>1)>nAtQU;S)_yxSMJ)^jc(y?2TQ>VIy&7~0Hd)h<|ln)+P3cf zWuQcO+w=M@#wPWch?x&9;X`;TC3P>2R`Dxr_h#MOHr@w~uq)Elee#eaEV{js7Q0mB zHwzY12SZ&#h?yhsgife*WH0Ru=uWs@aIO5MaTtGopBh0PQWZ!)K-(w=1{}qS$lPnoO zrV>R#5r?tTgcYu5e`i`#?@#(M>aHcljL8Umd5L@1>wRXj!;kT>2uh7_((4YwYy4d;yJP3hJX>4e+ z=9I6$7*+mm-LjLzFfMX+!q-%KdUiL`t}@DxY?s*;NkppI+wT)EpLQSC zy-LLbQq9|k?b<${tflG(8r(ZJX`6seeCVQY%_BfiLwUQRIBTa#)5f;}ByTmFcOjjN zO|gU{Ld1{1&$=w%Dt4XmHJ#pBD&Rt5L%QWi#ai)Gz3B=3C-nHTKwO#o8qUKS4+0MJ zH|$t_w+b5PZm-@&{1&^(Q@b7v8?rxsy?|RwZaM7t`PHAarYUURP--1`YrCjsA5a5F z%PhiI8kohzd#x+qV^*8T*H^^0>?l!tpWM4#UQC-4nvzjJEbx|Sc{Pm*oVV9a5L^o# ztX~(PS}O0%l3{u5=uM5(&tNUb&oXFN6{S4MODYI4ewZ4; zBfgekVlRUwDVFR1to!O~IxRK~PASeiYk$atlz7pmSYl2b))Xx`> zQ>woQ{H7yr2ba;-vaSd8*}!Vg3T|Mn*w62s3>VJ_mc&xu-75YWjsoPt7=>^Ksw%>@ z^5dH|3j;CBoQ6Y^4E_JVj~N;-|aq(=ZFLVop= z3o2>4fz!}}_kblJgsAL89VGpBp;-KgssxXh^qgerYAM9fNL0Z|f(uDMk5QOYBb@_^ z=*z}+?v#=%>-`eAub}5Y0pTWrQ>uti{#DN;6Yk+O_8LhBT;t9hA5$QdM5Hetnoe1t zb+VIn*nC55zsZ&`k|2bvsy?E$_Fg2B;(G(qvs-s0a^u^iXIEcS7lB~6Fe)W@m5pkr zbYL!+h&>47nY3q-UgATTIwu-^scM}pz5sT}5IBn7&7}F2-r%38!V6AAWZziP7{3vWFu^>}$#VrH*wr2itodgC=2m*H@`Cz2n0 zG9;FKH?}kTY%2?eEz9RB`1rqgQxz>FpDB#`Rpvay&OyDQDr@mcjBqmr?!6Gd+WWUd z!(AP|+zU-9d&yUm7|75tcCHy36ZOVvVzckQ&dGAbTMIHo6()W4i*#Fj#9K^jq&Avm zWyAhS7!{%zJJihtbzAxsN%p?yG?dm%3iDh3u^|zch^I@~{g{*k!<(@pRN3L0Vzw=B zSzkB3yi*p&dPTt)^i; zkvZT0yua@cuZrW+H}~=%>uELdeY8CP^zje5;t$jK44*7xf=S>leb^w7mcgQA6+h3$oX}&JYEkW4OX%s zaXF{@Z!(cT_syd-MQTDy-JY?kypcjqFNQ@o3EaC>38N5eEcEq-s<7+9Br?e=hwV$! zDjPlZLFttUcw=}9&5swgeD8Bu`0Dm$As-qaN&#TcEiaL&jXq@S1fvaY+g23n69$z! ztEBIB65D!oJ9M$@XeFixKW>T?g35ff(=mT>-HBX#RMw#KC2XJO(h!fgb>Q` zo6P)ddfL;z{)a8Q9Zu8P9S9dT#*ZuHKgW^# zoPTF6L-U6T$e>?H;8lNr-2QghJhOY+A#GXX>%P(|Hoehjt8@%F--M7xTh9Ihi5;W$ zK{<}rk;r+9w17;L2r2Qs$HQ_XOuwW~JC`jw4|21uNu}5uZ4dY2u{sM<3`{Q4a@dum z(5iH@hd7GPy~Bx8v7B=1M|+sPF(t(xC$O26H#(ley;DE>@#7+@`l0t|f;@PLT}0sC ze(0x=2jT+#eXYTP_o*%Vl7t2K90dVeU$^P^Clx1>Q#G}wXdL4xaWm(;^?JP>2C;jo zdFRYh4cE+wsGYR2qlI2nd)Z1B0I2lB192sE58>tJ6@u~hKJ$M30%;zvA5HS20z^~L z)dP&FAEB-+gpip=<#O5h7xv6TTm`P;7d(vz-Dq?LM)g_+x1mvXHdg8Zg8@^Ug!F~o z0JZ+uw_5)HY=eeZuif@7@mX!IvcZlZE?z}m09?X4@}}bJri0V%lYtDjSzBamft2l*xj}S_@@GzzulstIDl;lk;LxU?gedSQP?*Y z62rS)7ct-<*Ll$sk6MoJIhLE?NuE!2R{`(-cvh5W?@s4OB(=^f3FGc#;4zCyb^S4A zx|*`*VNRLpp_eXS5yOE<-XkiKGlczw7%mzSte%AiQeY1exV&1ijqiTL4QF0pWDu{R z7>F5+06VL8{NcinnHr^fm=#5@*o148_WgcpKe|fYSa>bocxuy#sB{1 z)B0x7`tB@435ilP0xz&79m7#DfQKyuW4>)%7Q?y&F`}yhvVy~)C(}(`Mr0U|FA!quzYTS zNYbDW0orK*M8>#5!FNA&vL!Doc$Cd ztwwiY*+DcNrPd_ig)JFHIGh)^ze^iHvulfuDvez<~ zuf*7S9iR`{QJBu3!ohcHUBUv`NrxU$r(E#bD0mA;o|XD!iAm#wi?G9y zjo4osJ&`0AKY)r+w}5@ayKg5tlj!KMV&)UX^oCIxjBDb+?bnaJVC!GXFNVcK+O^?ifm6D@Yo7e2g0n z{WIxnI{Mm@5K?UQ<$66cb|KJJQHeM$fRvHC_P9>kNy(MhLsj?PG1H`QC1p`w^%`9{ zBfP(BufA?eg)-npikoc>Fs6+3qbTPI84pd4V_WXP=1l@)TcFPH-nY-h_nQa~WM2@g z_Xnl(HaJTi46-BLv%N*7XeG`zxIE`E?V=ek&5q#TKEjO2>CvD~n^HEc{19LgRtHYF zru(W<&R^PWAQ3SLGsehppMUnV3&rocVP4zC9hnk)bq-N7J$m?F)V29)Py5Zq0k2OY zi+zddiqK0!NUOR`vq`bw8OT*$$@QI}`heNr6id=xs0WqklIqRq@!|F02aw5F%chK1 z4yr#!ya zKlq5Iy>9VViUhX^&E-=~LcRQ@^zodKWNm%xJ%7Vt3eMW)LmVbwJ0<=CEFRIlS}=W$ zuV7X>Q9}yYQkLkje77ucJ&jnEdblDXM3VCpSh_q(wga^Cs7w*ZQv3E(Rl5=r4|!(c=Ai~XDqbHh(+bsODQUKp z8&PtPRDOS_l*MMMoq+E!9j|S`nIjjSuCv4P}!Gl|jcN?rwf+;q}n&o}&X(kt*(b}D3 zE4-c#k(}=vB7UliT{JT(PF}~{Nb4=$@h;t`d)*RDFz$uj%@;KwfjKrVKl)PuSh=9Z)5zHUe zAIx$sb|)d^yl3jOGvK699`gnojNOI<%!|cAL+;=`=xR*z>Y5Batl5%;?Q__TuqHP9lFB4*gww`T; zyE)gFWr=$*T0c*bT-zKlgx7O}<6DBrq|5TRPCOznHnq<;i=Pk} zNRGyD)oG}5IU6Q^D@4IPG!(u@TQTxov(GYF$5z@zQ;bd zJGzJ9k3c|{IeHxr?*?Wg${0<%Dx6OXz52dQtUy>k}&WKu_!_Jp# zpY(I?FYpo0BN~qKH*24j6ZEXhmX`Xg;?5gyQIPPb0X7&nz!!@hyMo4Jxx?b?%!!vx z2PXr}Q59j?ANj6-0fg|aTcH~wA$swu;NJwHdADm!=|GK~Gtk@qb)}~D#gqRo3Iwl$ zTbHskC8BihegV_cC!dt-<8YHcNv2NxI4+GJnU|Q1j`QL8hJ-@f0~Y;mvEL(~4&wOXkAyVYbRRsVn4`Ui*nsEF%u4JmxI8{&URBsHpN7@ul?Tr%tlrJh>VG{=wxm03#asiA^87#mVx9hYQR43 zKeXsR4n#D1ekYiYb@@jwWpLxVKACUan^1hqjjn8}`f1798~^L)YE8q*$Fn-~r(@_o z+c)Efl+yc*>heo7^e0-|y5h!9k7^si$&b{bn+q3}4SZRZYkPr7>z6dxd9oZLCLx-l z?=7xw>k{+#k7n#)>nkxZn}v^;7p2<`9s7&~r(Tl#i^G_UhR2x>opJ&Zk|n5GAunlg z2Fvt5ACFwSJ&#=zJ&?oeb}=0q1pT^LXB`>UArgt`5cF{X3K&Z7;=sO>t`yU6GqDq! zUIhHX(4K4O(b0_gcr1WjNE`zuN;7AU#N*>5d-RZ^BLDNF{gO+tt|y=x#r@15 zBZOEto0|SxZheHWLWMuWyx^nT6m7I|kTrW$p(nm6%YySO^6}>&Y@Pj7*8ts3__Ia0 zq>0mYXj-ytK*##?@b{jUrB^LS-|&3j!+*hwK?^G=nw*A2G7&X&V>*Z8AvM(lwC*U2 z9$Nn1tIW~Qix-UsB=56R7cXiYH(`4)A)2R|d{8f;2pcKbDVwAF3*s3oA|p=b)l5QS zfm5IKm?tE7Pn9-8Ix;h1%=2%NL zyF|rx%YeZiXRqqfVEJzeE=JmD@AGWX!5Ht=+MfAPG}CV~Jkh7P2G~$_No@G9)gC@? z7Fq97xea^ynMhDNm~y)-F97$j5fP(bWp9=x*{OfzyN(|xmjO|i8*DDOs()PIc^18M0 ztiXNvBkIo-$W+vXOe$dQ^-UY&^gZYD-;&pLODyq_9+~6ykk>YHg&PE@WT&dx62to& zFBXM%irc2oUrd&B8!jsJ+!EF0i?z`S5v!OA*;A*Q^~MndC;O-KR7`*YHjhzparo5K z?~6y>m1bt%qG(%RC^#7`-Wa=o^ux#haqB}QFf4~AzZ|8&Up##KJJPGHhLyd3WVvhd zQWlWJB4K$mn;P`hfKzsUSdR*?XOeiuS;tXx)Js z)q+tqn-J=4PjrU+Dm~&6@H0<3f-wf8wymR7v;UO3N7rv}0O6Lz3wu~az4rU-yxEet zaA9ktfs$o>9#%kOr(6A8=yw94DfW3ZpH-B(4szAtx#jqQ)_w2@Li`oOVbgk)b=sZG z{qA)HBqY+nWERhW4%o7Nrkj0}84B6iPh%XeU2@~a%~4c?Ur?>dzQ5W6oxopwdwtjq z6wK6q9Ey-XcY+*K$DH-BhY=2CkSJ=^NYnZ}{9HrU`6(s6uD!)})4>RE=Vd8%=q z-~AD#?{abCh`b-4*qJiseK0vA6Zr3X9JisDeWrLC^i zx(iUjI@n5eN_oc1bZkp+nctJT<3G{SHd1)>dAyFGC(t=$X_+Rys+u1MK5A!VIZ`Sv z;yt(F3D{r}h?m$Vf)ql?^!rllBw7h;AM#oTeGgO{^3pD`6f~Yy|99?Te*M^#Yk#PQ z%kPg%^d_wHJ*Z6W0wS&hq*V%W z!e-ERSN39>6Da8F)6%}q<50@{J^AJyy!HD{DaE<{+MH!C+~$`x2qBM8COZDA)NZTS zSBg~vO0RRvr*z$>JLBh#RY0uE_<qqrMRA&#G-4#ZGqD;`Hq`OYk;+O?kbN3(6 zDl6?1$(8yhqs=uRUoGLZuzllb&9+knby-+0l%1q)=Vm(7}FCDN_?>Z}7wqi0rJV&CG_47m{3n)E2gE^^_17lTs?eBT*5-z~R4$9B%U z1Vu7>YL9KkdlkuD>(V!I*|?KY79+hX8_N6)`fhQAn~CR$V72NGiCW560xv3rSEAxw zW@)z5EQ3=_Mr{3*p>Qw4uJGB7o}tY*h6XGi_>eW?Nf_%O- zWKNU0XCNhdzHD@{!v_u5wt{Qh#1~t%hJ2TmY#SJ&34uXfjTG+EJ@$R{ZcdP7m_)Pp zSt;{oGM2lL;5g@B;vmCX#M`U-=hyd%)V(<^SW!7@=jHtc&YS7-A6=q{FetSq{M7*( z@$!KLhKBt~^vNNB%63psH%1WZk!k*Nie=_?e>!S@9g&yfz_Y|xfg4jogPQeYD-2d^ zU2G|d3Uh@dP4O63nviLUlmQ_MW7xO6&cbB&AhDC7>73CbETiH=%a5 z9;nm){z)^E+!nhtu1EmGRrIo)14XLzC5pJFp3CqqIgC=8kJ>DPejI+&0n9RK|J0^v zjG72ReJx4?H{KfCTO&=#wX83C#e4cPPTD2ogaGk~pF{>^JtIPnvG z4_0D0^bF~y`>{Xy4k3gc?3L8<*s?cGpCB}W?<+l}yxMOha5t5lfMMU8@^z4<0g@cq z^*kl>EL`XwZ(kY6asG(Gov)Nhh91*<*j=Q zi^{^4L+@28%~l&$=}q6)XWW!UH|eEB`si!bwIA^n<>tKkO^&-pJMPiWaFp6zvasbm ze$(Y0S*Ypr7t0&rwH5$qLcN) zTAp|QWEb}XlBm1wFSK0p3l|x?D1th`CCd#$9O3QM6#M z>7b_{pBk<8t#a1Af+!k0XLQUYl~xUGm;_)D&S;BwgxFdFI-+kr(R!2r(6%!y$DnvG zn9$1Lq&t4gI2Bqqt`DIlbh#L4+-xtRo5v*6ACAOqUEBS~_wWdxAmRx)lWFtl+s0y^ zP#4|Cf#1w&%4PY5cGhsymIWS(!Zx+NjmPmu1m`IaP57}XxItbf0jk!#ZR5El!33xi z=V8}FxPgY$&!E{#`J}@3{3#%T4*~|XG!sARyGN@s>fG=Jqo+FWi%tFNT$^~kYSwma zIKB=SKn#5w|0Op@z+EcCh851=5JGHSTIkc?u`~#ZL^*|97(0u-Ldkhk7TqobBHk_0 znMY0Xi#M6bvhUbeOjsbC%KW8vZ>V1LkWPo zo=<^|Tlr1oS$89-NDME&JuWsPN_*4aV_f*=z>JBk++})N#L8^E16Wt>PQlIiCG*H4 zo+&sLDiajC4%#sF{XHd}?meFPpBi^czHo7c2o!;va`AkiAG9;9MuUIC+)4;JG_gc2 z*HfcVxn9t!?XB6b8BR?v=!hgJmZOXOvN0jkGu#cBi4UA!rSrGT74d&b<@%Q=UVoa-79Hb# zKP1)VekXcScxL9?qrBmnL_QfjQH*`CoZLWM)1swMPk)` z2kN^5J|FaTcS>MpSW@ZDS7va@F$EVUM{fsFG905&8uBFnOV{X zP1acd;x;QgDt~I!PXUi-Y<%DPi>EAC@ehXykHW;N^j_3pj2*$+6z=RJuv8t3_QEX%qNHM37XD-9}@MufEcp2#KtqnLeYO?N5pf5s2`SfH)In+M$G$EM6s)h z=s=4BO+;?~x1&#$RfG^QZb9o6or(%LhHGl|wx?G({RBb=#=Apejy#kV)(sQfQf-Q(@YkW#O6V`LTqQK>@ zEM$Km{r0Px(OA2Kf8G9@Rb7X?7o2m266}S`D9{HQZ z>l*?>62qtp!fG?v&kG=&g&&O}#VgjBQT&T}=C;|DJ-jY$Aa(ySi6tN4ADM06seaE} zQNC>a=ehmVc&d|bH`SY9(1h(m1}S=Kr?b-CE0Zn>#~VtML_Q*@Bf*;6bXzj z?;)bnO0OHb<2Z;8Th}VXfy89wO3r9OS5>C%gR!23ndw3i3 z#%q5RIS@&>e7J~wycC3fyE4O!?$sE`{H4Yq?<=x*lpy;$o=TeP&AjwstrYH}+j&6V z6X$V1Bx791e70=3+jir1O|s4D7^e`suBq_kn z(#n7-YI)G!@^%-gc4wOf0~`+dGS0g*Vy+y&<;YULoOCdI>z*z%;}XuaAzqWfHIl-V zBmZ|*m0~;L_s1KKGj<(WWF8BC)$=(R*@g*n-;~v-x{)BXi?W!uo@ak!V_Sa|HzB{< zRtB1c{U#@wSI$d%a<-zFFZPLCoqu0znezGV(_&21V&6gablbjJ_f;$F^zMQ5eWwZc z@!Gjr`(|m0yY_mMx{sQU#7U6Sm}au}UDD#RwC`30)#7{YkF3V>#490QRmdOnnT4MD zD9KT(P||sK0HEGU!9hGkuVjXC0HY@jKoWoA=sAn{lrU=AX>)oK$< zs5a9i%od7#x-H(ny8v!xsqpIaE*Njvo?!~%4a)VRT2&=oc8z=aj9g!UDJQ15v~%E) zH))t>USnyfM6he3IQ&=@T-3Aw^!r7lnYOL*NXTGtr%9Bn=<|?3ZME7x36J+c%S6?m zehFaITtGMu2M6z6d#Sb2)OfeQ4=8p?rf!Qf2U5lpF8vBXBzwym>Tl{WDHB1*r3XBXsYLsdFV@ zYcmoWrxr^!LK~gy0+XHfcmBMaUEX7ws9%?w=E-b2L(B_kt5uh(mtuj7{uzy)qncoC zelZDr>QhhmzukC-SL3*^VpKcu?E3Wdoy~t3Y+f&`ovW~!Xo=|d*vgm7E)xy&61fI+2uanYRTyTapp0*D zPr2u+7#F%N(&oVn_;({dCLR_;IdC`fz+<7G>~s6RvoMX!5%5W;sqCj-1_Jm8xWj`a5OjGV}G-%8y6n z2zfHOWoaAxwM@%ufdqP(RNY2gH8NV~JtIE9d!70mZyGRPV7(<5{)i;XL9+>AL-o(>Ur%AAfp?!P!(} z$5NwcB1%SnNior|2ox4ucCw`cQ8QyHV(}vh` znBW0hrN9SonxflQm)KYOKOKAmjmfqR_djgSYBcwVRoh+~Y=Pi!sKh!*LkKzBK15B( zn+!}DpC>4d>@mw7a9>Q7yJH{ye)+VrW;>RAIS1jrdBc=?n%Qo}e55yVbeE)LXD?3v znJ#_tJ1-0EC(XRkkSVu|lXY-W!a}A+%XB?Njf-i#;;$Bm-U{tVpqOu@j(^Zb;nC6h zsl4%Grw}P^Y^QH9hXw0Rn+b2TRb`rYsM2Gduwa1Y zD2e?UTXw9bzL-IyH0mji(vpu`v0(OuR7MRAhAK^hAo^m9Ln`HcG9i=~955daj*b8! zd;aCj>^G9olS$8Ht2WTD%FEYdIf-Z&TbnA$9*@5iolY0Y2Hri($d-p@MTIcC=`^XI zZYnj-9y7X>oN>(OA^-$ZK43v||9gHEyW$!n-Rsu5ltmaY_tuq4hyzk2%neL;s?pd} z9|MPJtOWcvS^UC$^OO1x*TVezzf&i*f@CT0vKM}hu3VNQ4yF}6Us1BMjV@c3I+{!B zI@b9(Es#kWkE)7Pr3tXosbty3lW6;k%C0qIOK4-|djytjK zL(~gY#){ETSgw+aV$A40S`yCpugjVX$+qTFbPh^^J9%~NquZ&t)Nk;1J@v5fBNXND-^Pag5YfLfS7RkgJF8i1KiU;HdP_mIT<%1m1r!SQhpV1h!GJM4kZ6{m0&^L8cD{pAqP zHDMc8-Jh5Y8y!w6(#4YcGt6rHI(*c8?l;0)(7gYd=*5~Ss%(9Jje|kc_2>n5igGJ4 zTK@;zYWnmJ)^y570$58{+KyV*Y_*}*jmWJLfs7uNbnY!)5;*?PM#+8Sn%x0dHcj^N z{0m;{;NqC}{lyxF=fzZ~UC6)FwtM_}Gq1$JTsRZ@Bc20U!Mp0;J-|wpANoUn5xlv9WiUCsD)}X!;&0TXR44M#E0G&>)t=+Tiq#=1Xk;+WHhAsllfr- zpk}vod_BCnFIu;F6eO79wrO$c{u+K%dCAl}UEv@L$?nV7SRaV|od&*JB9|iUNdR4F z%TqCM02Hs<)NA-8c@F*K8kB(8%|&(w$@8Mqo-Nu!TvWitm4*BDhcOV^$0y;_F+t;sM4?0{Wm2#AwI{|im)o`mZcXyi!f<8rNS4jPx+Ez#- zmKgbQxqX#Tf_U1IY$kifrCI+xsr%tRBycycYpUYN%&PcDc^&`WW!_i%m?{-ing*)v zvMS*9Jd8R&TQaPd+S)AVMG%gmUmN&5-@3@^k$ph@)lNb|z(zC&7JBp3fUop*sHbC9 zbp{kV#18dr<2(Otl82cPq~uo7lJ(_orS2z9*9(4JHz)D!&Z#?RQ4_eTn{u$UiY@4`@uk|%AdZfI6t zxln0GR+OpER9D>NVGYT*A%!u#%w@wG-wa2UP$*vmZS>nf25z0zPf)jz0owYlxK>gK zx#&oMiNcS31JMW8V!Wx2@Y-hXyVllXGO63W6T&NFE;S20d;`y&2Uh0Ia3jg%v~hEX zaYhzfqGT$|3Tn?N_HX@C6@KEx>p>g+V?gVR%|%C@R3! zIZ1(Arj;vGwc#^45G%3P^l(Boj>m_4cI>Bo4kO!v=;I8W!}h>+FkR3ElBCDVcluUk zMPAJtxO^#720YdTQE4LgY&mA@UjI$EFP*s#%(XPW*kh=-#~bgrxy1+Ji^WTE2#vagaei~xY6aFSBo61?=67(8f_q*;Q?PCbB*alZw2AJ|yqJA#e z0{sR@Q~XKQKWCfoeB_tSz=qzAhOj2XCkx2+RMkUszD{{AMwAZnQL&(- z?@E{54~jb&Vp82sfB9bDqy6W^{_k_u!t21M&o?NB6`>^^vWEcFz?`iV^MI$-fO5H9 zyQySc-#tr?^u&=s5LSbZG*#F*gvko>v&G)(}S;`{it4dB*@IRSX8wPno63yL^{j$1Kx zHx_XA{wQ6s_ua{B`btj1{+my zKrfP%9MlRnIuT1f3SN^)LbgJ6TmZ-g-h7`rSfBase29Hm!9*cTRQ{~p#d3id^|dJt zZ(8t>I#Y4IUuDFsPszFOTk;Qu+I#Q(MgxAl7^90D)A{&Ld-+IiWGg-#vP8OB%IB0B zh|v1-1KPlHe%^e7Ozn6aO8{fnWR6qFmy!&JTf^z9hl_-S4weIs>f*(RXR_C_t0Vhh zrOXNOYm(`W5(Een@24|hUfmtoOLG|x8Yaonl3Mu`Ni8!#KpLp&gNg51d%emmDRKle zf|Vf+M()$Lo?AMu$@_DsWhr3)Q=#@a7Rw8~@W>wcJpUXi1{1fOxM)w^T@q3iBY zIMD68Z6=G^htKB!29zPE)Sglva*@DOJuOsEj}WQK$C3vne`e|M{%MDS1&SuX=QTtU zz1%r?9eJhE7d6XIlk>++B`VNT!@gN@|86edOXbwlEXIbz{)rP63x&kJRM)k;NRY;a-}&|U$A32V|9pbWYnDOXrV_(uEV{hVlV{exho?Si{u=%J zFMCn*6t(eC0K}_5;HM4$JMWEiY{Da2`vWFH$3#e9V9?_L=k`doO-z(^0YC1+6Ul!{ z&!eE*3(nRda2A?ENAIPwIclD<0ba{`>*G1}Qxw_zjh=XI3^&>*kTe&?GTE)_ z^_qyq)3G=T>UI!(Q)+f0DqOp*0hGb0y2{N^y{hs=)2x8<<9(5@bQ zsgcd5ip3?j#%FW)e?nI_UP$SApO@RAEv*zH!Quo01!HHsf7s{zaLp;)v zTq3af)w%U&nH&G-YT9(&G291uYK=80i}t@FkH_xSu%^Y0e&T*^6r36&@lta!#HEuJ za~t}&wIluwbDYR#U{wL1l#8hcmbE2&DZZv#E#I++;T{RiBn(+PNh2O2r-xs28@do* zeslk^kog*6utB)^$9plbu4zlVhN^qa&r_9%ucCxmyJ!Vb0(OqY8d2B4n6o?2hU4ee znWe%lhK7c?y&M)v{@yMwY6-xgsT$Gr+s}s;VJPxPaZ(S9jo+?C0lSskm2rBjTgj71mOcYmWuRncoNXOtQ1P5(p;*l5RrJ^%jA2F!pT&6T zSSLQw3Ggqu<9FZt-VIv(^s7Ow_vH{uJw*8r9z06wm^!-J;J8o5A3&SI!RWG*{+lZ0 z$p3jyf_o%%2p+rR&>0^OnHiP|d>yIM*^U=)yx%NR#0|f9gxQ zCy2rPD>o*;U|y~Il?(H{|0Z^8^g+0I5FN2HU0b-3Y=vWo?eogoC=z&$T!+B_dAfC{ zAA}ZBx=rRQ;W(OZ6fvkmoA%Z&f1kFUAWhP8*#Z&@bdWvh(`? zW9_ZuqFmH=VL%WBVd#(;O6gRP96(Y*hHe;AB$bqyAp{(xh6V{~X=w!1pX*_UHSV(m&&oXE@@kPTToq#5k+Wu-=z&+Au4TDLEa>{ja^(y zA)?M@UVSV=3SXFb4pFmQi}P$y^tKmdM4YPB^P%krZ#o=3HeHx}kWMPJ9uta7jK{!& z=j`bEYegof$_>Y*SpMrjAF$1>cQUmtEI!`A9;_Xqt87 z^h;rpx3kk3U7?UN&S#`5g-4^VLUG-V?g*amDChwXe0# z9669KQLw1Nc!T=}TD=5W`^BEJanT!;nLT^S8c{-k~pe97%lH?`sWf3;U+XFHYrA`9%&E3Kd zq2PMLg*P9c7Evsz@`W+V9unE?Iq^MQQr+e1O;zfXJL)Ng9i!};)xq%HST=d8_ZKXC z>GLuLWAtqXQe#i86umH!Uc$+_(!efWIO>nqnKFC$$gLEvJ;DY3cJXqdv89wW=th22 zW0oWTjFC{p!sac14Dv0xdHMpL^7_}K4iaI-{-LbjWEjxI{R@Ei#=Uo$rknc;V!t_% zzx#<_XOGXWJHG&i`xQ=qxTk-hB?O3Y0g`@~5ZEq8CGxc>Aq+i(nRG@#)L>GiaV5h+ zaDO)e6Y_hkUzaPZP|gOOqRk52i&T`TLPjxOahAveJIiGE*LP&@R^? zHUr*^ge7kjy*Q+C`#B-1+`sV#rE zV!twllOrV^RiDP80QdH;bx8n$*qi3cp%mk^NE7rfDHMJ*W)@Vx)RP`E^ai^ORoItV zRN3d6@6OOUg#mjjW*0w)lhEt@A)X4*Ov35jP`^(+X3}5la`q9NY_^G6nY}4F^`hNw ztk?Lq<7}p}p{r4|wp_@%+Ori5;Ds4MN|vmDx&n>G>Bk*q`b851Njxx-$vuVN9Lhh0 z_gAF5NJs=+B;RguZm=15{L2yud3G&Sf4N~6pU_Z=&~(E31aP4!fx+IT*rUa#HCH2m zEWn5{F7;UOxWmNlL|fi|AkSiJN&8wzt)u|T0F+n3#D9=YarYso{BcjBl0{##5bX4J zjr+K&ru2rklG;J*xTek8#TpUrF^s`i)f6s?YZubI@rhyj6d=WG5xRpYyK6`HI-c4I zcPy&Zi!5*Q-Vs$Q5tZBnB3b}-^>N&Ir_IqFD$uQ$DY~#`r}n8{jUz2hh-DM@p%nv( z@UZO`5u={?AO3-#dXX*_x}R=DH{-XFdvV+QQQ93I8=tG>v>!7FT_LV_?-q2z*7I+_ zqF6nP{qpSggCL-6pmc5iW6c(jSw|%uAyeHOxzS2zr{Bf&n>fQuXu?~4)?b)6+!Ki} zm*x9isly4C^MMp0f+m>+ZqWc8ZaJdPQxB$A=PsdAU~tppf2>nU(2LXryL#@`v=JSt zLlI5*6@Cg>VrMrWBpTEi(PIjRNGG~8z`O)q4lHoHHFz8<9nNj)nd|@p8@!otzUuPb zc;v$kH$6T9+VH7~(vDk~CL}Ma*-y+4I%m+5vGhmF5YQ?n+&iyNdya{8WoPcyg8-?c zUC~XR5KjA|eg_@~SR0P6Pz}8zst8x)X>WmRGx4ifCvbW2FuHR6cdL?R!)4@@$ILn}mO&qfa`3 zsRCUTu&Rn{$o%7p|5scC>|$Sph=Ngg;PuOQ*`)`*h|Mpb|EACvNr{XJhZAoE;v6fo z1Z?dTA*62Kjp4MP-f&Z+H|ScDWcjFOR(4cjTUy^B(EoZ~iy?qzje*9-d#fPp%J$9~a9<^FH)ibH=XF4$^&`nQ-A!5&V-qrn?v z&hO|YF>I@pJ@VzZPyg^b{}8A)BVmk*48H}?E>8J9B@3hBCpUXRdPRPQ+D<<|=9bxd z&4s!RTBCrjAcQa1G_ma{ty16qbRiPbM6uf_OwCS3gJ5_zP-@{A15nDRL8SUh-S=)& z5{fkUAhB*$Ikf@^Evoi?71;M=-P-!<(}`P+C8LrdCfMy*wu2cC`D+H(g!6W>KKHrz zpGE5$Tqn!ot=3xXHe@@FF~lWlU+XC0WAS#}6(AbF9qq{u$I%wVa`@|g)%;%0n|9d} zj~&mj_Voe7@R88Gqw)TWhaI%{!g*Cb{Hl`nBH3{Cn~NM1%--Y`10}q#8b6K^?`I4B98qg1ZmP z-egLQY}tX;4a*LqFg!fz&7V{f*cE(NU~tSZIB2)m@QtmLWgk8fjnUE#KCnaHWoxii z(FDkI1s#6Zf@5}|V%?YTq593`{S|Tkfu{2>KOrHSrVr& zMvRgpn!!}!Zw1kZ)#~Ok%K8gZ+fjy^b8@rx-f9v}m5Em}* zLXI#6wd5sD!~#z5@-(%rHk+1za_55`ZB!eDE1gj&AuN(oVvlrCN#Tg+M>6WOebVED znM;Sfq_uZwVL-oM3sXYnaJM;!^X$fLI9V_r}$27F>nd-DSplpWy3D)Iqm2n;SRi zO!tZ`M^&1!c9t7UbR2SteOV7&A~=ehuQVOSbbn3`n~rozr$%iQ;)euyaRfYDMRS< zZqdWbo^ZBN?u{*XXh5be3Vm?ZiG7I?pi($8MaKXd((0H+akyLC|HvoD)`_+~j?3Iq zgfLjOB=_1yvfbM+b0V*)vRxGo-d~hhOJt8?zgi~oju&B}B|YIRY|CIOJrGTjhbDVY z<%o65$dJ4_-x0waTS^xmXT=E@V6yN{5~#u6dt8ba2X5+W4LJsYtsbD&`P4y9PHv*n z#qj#1*l)^$eelcRzL0%r|DPLNDwz=gp)#>Dm?B_1f0b(HlcA5Y#6`C)7cP7SMSj#+ zgc$1#Mmz7|7*_-lX=@ZDNP-4%Z^_WZ{0GvI$1%`KJa$+^{VHDda}{6c0O!`gCBz2R zo!89wx-^2MOb#vAD$VNq`J|~O@k2Bm2=;*mZduP^{?uoj1OnoRa;>|>=_^hXS&=c< z$EF=iP-4m|FN*eKMII3QIu~H)|H?_dt*Iw`GR}Jwgn#Ao#9ld@XDHy zx>>V&+v)YIvI?uQ;P>LQt(0a-z=XtVawKe}(QN<6IzBT#!4?kFVA99x?K3W%v>WX04E z$E@YcG*ZJ?R+;mt6)Z~Y%*!hbJI_}`|@NnF8h_C$?v*pb}K|5rvOh}Tnj(pUAW6r|6p40FS?WFTjL z8WIzwMR8-fGL$S%wKPLq$}i-rlP2pl4{-IGvAGS1ob0H+@%CW!>W3lX#tDjj9Clp`6L%j=*WR+lH*{US0Tok^~@z z6pD>GS?cPNa9}xS%^>%+<@cTnL3+7XP%y3PCJFr7XaRnJ zWmp3Nuf(bcj2DWr`icTKXHE~7*v*J2|4OXHIRV9TQnvM{{+}yW8J8YIE$?B)MnKD~TipY%K+SqS2NJSPMWz;^OL zqPRD@HBk}>_dOAWV_aSM*s^ksu*^6!i<(e-+_c!i4bs)3Ow6#Ri;p>wsIy2q0%7rU z@SfXmogd|P9$;n`f}A7#ck=RoF4KJFFe1j8_rOi6)! zx?U7+-;+9*l}R~xS^KI!&4zo-i)~{o?_X5xqdpeA7mn2Nqa9fE8Z&)MuqP$zmx?-# zv=}iCbhGIROGRS3RhiBk@iYP)()+SyUV0&bFe6Gc>s58Z$(Lb08|kU;ukLUeb&^n} zg(XKK!3o|5S;au;&9cgLl)p>NdX*9y#l5?C0SdP`9TN=ky`JVkc*}D_Y*`2z5Tg*_@hUbNrDtn zJy=?ED+N1qu;fw=geM1`VdlcLQ2R0t<-PH6*jj8&S)KqnXhpG? zSV4G6$@W%KB%V%sN7pc#oA(sJA6t)Juqo$(H71@4QYoxzv*8=%3bRidad*K=adpOV z*n8Y)%peFDmdJYfc1;)Z3xJdy-jT8@)3n`IjN+$8MEf1@yBIfcKKEB1&rFYKI^J;jutm{|(E@)- zTyQlyDnNl8r-*Eea*UYrC8{^bR#=~VCtG<9)%o6fYx4kDA3hztDfiyNSH=jczktb> zhy-C`OJ!Z+bmyJlP#4tlC)3f=2Hd%`n9rlQ;B9b)PBUm@()HGc8wM+Q?QCv7l8y?L z47+A?%s}0UpJC3uXB{x{)N`kDH%g{n9f^MjmNhyq9VL`{wF*y^FhM)T>Ub4q|12Ab zk^lxky+T+R25|Kxzq$JSf4KT3fAN3rmi~2g>~P}fOhJL4VkaZ*HMKkz`OcZpx1oJg?b(nOmd>y(%co=>(==~Rk@l`DDS5h>UQ7Cp z8vJSmdkT|G;{ZVguXiV7*OLpm_39&pP_L}@e7bymqad+9N9WMtTskR)#i6LBL=iol zV{bNUj#x?Dx<8De>!S{e(X`~i`Z~cz052j@u*q&l(D_&6`7#->vB5%}$=>t-)uZ~? z8s(vo`wtVb$LO4JA~hvPZzJoJ`PQ9iytjZ#Ezx6V-1362XN z3b+!Bto9am$e&e~yl*Q_nW{IKZa6q(dnfDmGWgjw)w~PrWsNB>;r3$xxPm5T)`Ij- z-kv<=&3Fk1<_sA+N3qb#H+vWKGl>L5&xVNTj%byHW__nJs65L1GXr|2^%KV5p2osX zF<36uC&i%vrGvzc-;3yTnwH%ziW8-1p8t7)7)DdZ1>nYHuYU&Cagfi(?MNA;yDrZx z7%C|bw}s5iUw^S0)?Yvba-1-=L!L&Ky%Y+a6TEnqFG=Ngx(a$`F9?7O>+vXC9!Hjb zEd0QkAtEuQi9~xR$JLR^BDEyS{Sv|NQTP=oMNR53%3eHO*C&=rtxEJ#k$RHv!|3ae zlXH^CWy~l@QmP61GzTZm_;e&K9D`KVUM)H5%iOYxHi;6BNg>&L3?gHPlN%jlx!3iS z+RUNwTr&LX;FU{7oQ`-SwqrJYK@^q_CQEJTaNtyg#|%sBNJ@nIik$&?JvUwy74ZOQ z9zWB1YJSrltn;s$ag^Z0+y8mZc;g=}2&&EvQr&LC8J5CH=c82%3* z!`*v?envxMLD3=RE4RR1d1X^cB4@H?H?rBLG90m@cUeE1){I!?W*mLtM_p|=3@J%3s(KjD-ClMs>%?&)j`B9}IM zHM$TyEv8qhoTnPe1|bFVuz_8vn^gJ&r8Q;)<{wb(3XW`v`}9bOwnX>Da!}r!p3wO~ z>dk`-F%hC6Jt@$YUB^;*Y6QL>G+hPEH5q!v(?vy$7RHdM_%%V+K}ROR_+rN^t+_lT zf_#rD!#VLp>6|!CSf`6Nnm~|F^k-$_1psCvRn@#F9JT)5!&n($++5Z@8cwV%V+baQ0L z8Gx91<+qrr{3~XLb)05_0HoL1Q_Btl=5UT*xh;pPllp%cAR-vU0U&CbbpSA7vZ&z^ zTh*&six3NcnB6Dz2J50%EeF^dKSh%Ix{-4^kwav2UmM~dx5U$*fe|;cCJ6ajgtCGF zt*yWzsa+%oh%bi73`rc9R9_>4r6lI|4J_J`2GnaNDDvvD4C|t$ zT>6I0Mf~6IIr5zkI8|cOY@J{e#x{##5B9XJ76Fd%`*jhc;kovM35?GzR#~fb>Z3pf zKj^-7B-ic6{%Ne@VZUN2L1zdh(wlJD4Zjk+p^<<0mrY-@HMvRjo2CEjJVcy~=KezX zDo>Mu9w|Y2LKq{5`jx~D%0<;(W7wF2hUp;=Np*~=gebpm8enR!`cXQ~#RBZr81LQj zz21pTO!MC_XA0ZxHk%p($yFHMpXmo34luyJ>)FKB0heGoDf{$!63D)Z?gW|oQjgo- za|X;h;r!0z#T|1ll8rb`Wd@7X+ha@wIF>3l&1SrQ7nUFfF7O01c}F)EQj8y1tz7AL z@Z{cFX_zuih!I1$JE`gpxb$`-{S7)F+!l;Wg2L0zvi$a9#q`V1CxN-q4a0pZ;m7^e ze+p~t%dh4|J56&apmVWbNCD~W)Boz`(+h0=X6OGp{|KXDenUntU;8f3e2an9?NF9~ zC_i1f>0+F@ickk1N0RCI?eLcf;#D@(hMmxx(Uv+|?2T!4M?X(n4f#C*39f;+?G zYs1R$Ma85IdU{m|vk-cJe6@qm8%M7TSdQ@*y|pkMvkC5q6%<6GCqwi!y|~ztJVJmJ zTaFTSAZofp1o6I_pvwYuY~KSgSF!B8wS>3P<21GP;iYWT7b|Uy430f6mc7$QG-dJe zsre77^WClkiug39Hk`T;`#iDGD2rk=<1?VT0+yp#Qf5nl78!jlFHC}?|X1h(bs-PD;Q-yCikBC zq$+5YM5(ZKBVE+(NISHIN_xVyeF|y1<2{ip>Q61VUm^sNwAb!qwufLQrRhS9+Vfk7 zNlzy(LgZYN22FyJqsm^ELgWUxnqthovTaJHdR~H(ga%C#?gU@0RI7`)!R4DI@q$1# zX#D-4zx=X3a^cMB#i+W2f$^~AExvfO1~A�d<$Cg%U*PLlS5am} z2N3~+u#_=xU^Ux>E=5;1{fnL@nYiOnJfxSi2Usmr60{QVQPs67d#CC@*Ol>rp|#_| zh&7r%&qSdYWYX;^h||1$s^X;3s{%4eqWGB?M9OIU=RyK7bbR`2=t#Rg>nRNEf%=cW zb@l{yUx9}IHupWmf9m}~K$qXi-w_}xxOQug%x#D3c#0ZGNu-WklXxO{OVbiIsEo+E znGvpp*oF~UJ$7c34$IT8gvMq#U@A2TAjBwD>D@#D#*kDog`-5pv&3N=_&^l zQ!&eN6v zJjU9~OHv&%fLas&&sw~L8wiTwy(djqfF-1w>FeJDS;G&14UkSU=ezzxQ?&g@zA+-u zPbGZ)SD+NsvfF;ULA9oqcW?+?S6>6)(%d{1IL;RXW3@zC6t<*H3ZmhzY=Q?w^f6Y^ zATG^}2s0erryRpURV03n*3?H&c$K}d4Z6Rmx?k?hiFRcgIvq<1nP(E~kyYw7rU2)9 zUj}jC)M};4$i&)DCZ|5swi92i^5y0b(R_9zq{mQ2)2AyL7)&Y`X@dnj6(oa4TZ%lZT`24jM+stGiHU-eu^@UM9QI~j zC`^01Mg%?Te2oQ;>=SmdSS=uti!b=gso?>#okuy-)6dSq%0Uk%ROpErYKzMB-OcP# zZ}a=;=~Ao>{b4okA))tDOl<}|b!OZvvZJ{V^|lxojUpw3(S_pklexBtbDd@~wmY4-qr1S*P3m|E{8Iq1=DYw)OI z$Q~i{L8Oa+-U)uLOV)P92I4j5faOskfDbLuefe0bo_w@5Nx0CocdOy zm%>s)iN}g?)j8gFG(ype(3{$@P-X~a<0sj#DPg8<#M+#br+>r%&fVyJZZ_11H7@@hgOMA2JS9v&=)HihkA_-Q!%VoL(teMjs0N&QxFI7K zS1kLi^kj}d9XAZ!b3%#viDSA4D6Wdv8ODjfU(?qeA(kbPS3ATy6-k&P6@z1HmBRjk0XDH{a*<3&p!~q4KXdz z@XSMUGU2w_(E&uL8jl)f|c1#IMA zKsp_3Y>l3+>`;_74oqp>o@W{mq=mg76tFzHZon^1B(77$&cm%Jt?)Ir2cY-?&-x+ee7@Rz3CtzF(}bO6;5ii&j=syWXOYS!A3E22DK zyEf{XsyjDZaH;Ep7g4^Ht5VqzufZ$YBfCTU=WpLKTh8d~&p2kj8q*z(8p&LsDRl}cBZ197 zaj_~&5%d2cA5L=L>MtG2hy1cxL?L2v&6{XA{AA%|kUcz$8xU(2_uAn<71DqErt%(F z;@1v)X&2mzN5QdM_l43h#}nXGQ1=~C z%os}Beh$!4Z#>zg@J*Gv6^aL8r$eg3?$m2j{T4wj7Z&<8WouL7ah1C8fX14Zm8(h; z(NP@w@U@s>4ixTsJyMKY{-|E}I~~kzYnZH4kdC27f>Ly`vD8d1alfZjhGEFAR>k+> z46fhgWR5dNJ?>+KpeUe?a>7N4NU_UDFOI}JG|%ShHO9Cq_~JVinvCDwFu9V##1=eV zrg$2#!t`Rk6<5L0+wnw}IK5eT?R|FtBIdWqpxjAA9lkmieu3ioFkPy;Eq1KHAHReI zIA|x`0Y)9Co8RATe17}d4?EV$C}!jSp?U8n?B|{A5WeXLw?@~12LYUtR$K!ls|pj!CspJn-&t1u ztUUUm*{a6_GXouLYc&(>Kp;7!}5Y`g%L*tyauU8t3 zY83b13GjY$eqY2Sz(joL8zvsly+}`5f^pRqRcn4XP6JlDbE2^$kNgZBQFw_lb8ZI_nN;e%_gV7* zjGhO6cWI{C!_tlR^B9gR_;9Q4ZnpIN)_jA<##DK;8xw4Y5-RfzAXsznXY+~k+nAcq zl3LcTaGh^*dsS_1X%Fm^hrd0TvFr%+67CC7N#)CWYvb9D~Y&@breAVfN`WN(Yta-oOE&x*7%!Yk~-AHDp6i}U`W zd+##sMio!oRVr83)hBlw>`xB25BG9po1KQ!AFmBl?hvP2slm4aePQ4NY&0g(>+Qd< zEeNi}ybs6&sh^-h;Fx@++mxy!It0GtY9^7fz!9{^pGQ`Hx18fG$@lgXzyexIK_|&e{9fH zyJPph+v34{tCbliPjvi&ZN_W9*R>2k=<}MqA1+;?C4a0Kc*7nFclVQE&BfRbTk$mG zC?~h9PU?-R+!w_Y!R%)XJYcuT(>X4zW5%%-l3uvl*2=x@Uynl`jGRbqS@}k2WdvuSEsPs8}>wBpH7{(ZO zBYgv+OXP6E%Sx-dqmhb*a&tV_js^$OzH|H#2T%7I>_OL3snyVEv@SY`uLJaK_wBb& zg$`^09#a5yjv$iSAM%uYq4CLn@kQ) z1g|4=OiR&~1IQnl?Q-QGeJ*v^5~gN*0nPK2e}tPE$2$US@&4OQzIQ(efgpI>0MN5` z({ZhPiH)Ld*h1kz^?r<02!K8olMXNODR!tdsg8pkx@u?o5NXG(on*t~Ovh1r=Jjlm&_C&W+b+b-P6%2K*K3R%x7!#Gbxl5#}n>KkOkM@cU; z+bRYh#MnJjwm-r0H%OTMh6JQUN-Pc^p!c45t+%{PR<&*A>RIMc0{y_#tR4HS_dD6{VBBCC5nN#p zp)fV-)4Ap99OvM#TEcJ^hU|bC9(L)rZ{QdD^mM^%Ti3bqDS1hVRsAy~F>tQ-QJwlq zEXVDGp@{g6jweA&JokY*M-XzbRJxD`emlbYLVwQCCYLbVTm8wZXS$$Mw-(`@tWDKA z7w_$&Ne=XCcyzV$?d@mF5s7&b(Zby9K^&{Lj@1_QJnWN*UZ@+u%GRY2KN?%YbgOj^ zx@}g9!syF;?WxvsJ=ZwQ9JUGC3Y>dD!|~AeE@`@S%e(BGH-$I(?^4y@MLcNQwjOCz zd=Jno@N(HRJ!v|_LEPGkiW6>MNjL#`q+PZbni}?&`#(G;p}<+pb%bBo ze!}Wm8_#-k0bmA8o1Hr%Km7SE^oyMT)_s)HS-_jbw%}K2DWTCZVEK$y&bQ1O;7Drr z{3Lhs3s`fA{mOu7Pkd~*n6mE&l@=__z<^fiE{AogZf;xy*XC@^tI*SBaP$4~!WK`R zbNDjrm)hrw!3zLE81-u^FT0TWdZ$C+BDhI{{rdCxS=M^m+zYo}w*;WIMO%6OKRuIj zO9w~}O7s)W@C$DN4w+?hG#(R+4*|&O^Nf!v&~zqO)-qm)h>lxF&en?(?Jd5@_7t2O zEx1KvR&jjcZYaT!=p$>Id(%yo14^c$yPc$(#)zL>h&%Z1-MH~02i?z;98`H~b!7=K zo>u3I`?<+x{uc|`cp2s1Pb1mNh#5mjOL-fiN| z@mB~%5p6dh#4T?&4Q>**PUnRF@Ej6L=hf^fcJ&| zc>TrW{nb}(A*x8T=GHGaJ=|W!Hk5kMP7oj8IgE0zcS~uqkQle93VfgCaYCC>n4WjG zU%HokG8%H&@Fp)}1k{5h*#D)Wfv7xGn4HpqzVqE;=8=r&>j3Fd13<#ciT<2uViUYA zb+VEI1(GKZ^Xnmc0F`o*hI7{8_6NS%5@DYw-Hf~Pg3sc$3!dJ18da#(waKY+Rkv znoa^6>o$mm;}2LjTOHPgM#X9p$}VtQVe^NUKrhS5(8)#n-btx{!xIK;W#?uJ5BC z02Jca(1o_CQTBeH5ye?F{`C8tuWjCfnhHj9O0vvaw z3rPE9<7eSR^`>d#njIkkNZ0+4>2ebIiZ)aF(11`^OWu$Z9iA73Z?k1x`4cJYZQ6PGxcbCpQY zngKTw_OBm(|KPRy_*1RQTld}#%4T7OBihf-mQ9hM_8Rxk^-X=nYlxyL-N|++RDN%c z$KkBh2Hp*X4sFSo)@ncGj>|gzC%n4d?+(gk`#p1hqJ0TbGLX@LU4B{MKyy zaoVjJR~<58xL}oB?d~?YSQzq^jc7&D^3rETIW3W@XGIRrZSH4;>S?mhkQHt1Mdft8 z4S}aYTO0dq0>|y3A;d2Ug2^Pzc*;R-H_|cMH8govq22|v<}Bm-HwzIXx2R5^IUvD4 zzA^FfYJm)@vMZw&!1m#zo&rfOEx|iI{C2urMC4#!L8~GvUU~O`+I2gyrElU*1HCTE zn60K6{$P7OipNSmNB5y#b#@@uY2}c}0GtD8ko{>X-}`Ph#X5Q<(4NYW>f)%|ONmw} zQgpA=zr1CJ0)3*hm{fE)I}OBc@VX^rrw-O4Z={yfN>{?Jx z`qMJMev2x2*UF+gpld<+OgneuU4{>r*r9<#!SXBvvTerH^t^2b#vU4y`9xH`u6qEe zoZ=G%r)fkFtN{XT>HA}xmQAi{Kfgjl7alOlRT@6)7#4UdJXko_XC`Ea_(_M`R_>o+=Q)ejKE_*Ht`^m=$*96d$2)4NOw>H7V8v`r-( z^`QM{vm)3GL#dDZiO%{KAaD>gi-4w`+9 zLk4bXQp!$^$XxyImv++S@d4ePUTx;_4Sk+eZPs+{(d+z8LtQqz{>$?n#RZg2qVKZNl6+dx{)TV(9am=%xWbKu) zHtxodz3+MbBJ(cRNeI6KK>3Y~Va6xM)7GY;yDA^t%Ior8gJWdhWPQDX;^*6{>#r%MYylAk%m z7d*4VNmUr|ZqFI@y_A>^K4NizQSmjGq_!SF9#W!P(v!AZFy47%Iq|9T+#;J?o$vF&h{xY% z>k4DvTJ5hHoC9c2?f`&8+RWUGyR5GPj(8rSU7$J_aj?`smDD)#(w{xv*nojG!BVb9 zTWcMBJ?G!f&mL@*8GL%<8;S?uW|>|q>pYX}y*H9$ZasU^#nk2p1H%GyTkTZjn?j$P z7iqP>bbLgwrdzrnY)l^_l}4UKtY-y1K;{M7VQ2$O*O6$?m<=8eg^E?*F#EdptTfkF^D?B^V3J+lf8n~=TbEdL zRlBEBhPC)Y(2uQqS2v~SBKz~I8zEn+IEbjz5)|P19-x|aeE;)7|0b5eEq(tk3C$i( zw+o-&jBL(4s5b{YojvaX71F^-Lt8`b50a$_g!pQ2gfVq$|I=#opT1c}P3URRMh_yI zcdPF;#D$bM0zx}{{~%;i&iCU9VN8>VqYwU}DdawUbLQQrn1w!p(VBWHfz|oaw#JB< z{nj6e-m_9oDTurM@Gr0mEL%lo1!CU##>_O#D}_oJUT0-lvHl@lbA@7O?z*#D%kn7X z(f&bsLpf?~&gTm_nD`}8VG~BXKV+?5Axj5RU1w~i5qause>+sz7MX8&Rz`MSi+p~% zz<2Sn?qLt~hj|0vTMfAJ^+PiMcY)CY=m-pnaU72o^E}Us4f4qb!+L&4PAfSOGTHm>%?PV5Y>r;LgKT-92}M**D~zR^jlq zk#F4(02k*v#4ZOaTN;)8=(Fp_^zCuuAy!jO=(gk8 z{_&&L=-6f;$8LO|DN)oX(2h&1nF9#z?SRwi+Px**!@41$j`9Rh*qgjA9Rq9{pOI5~ zTh?Z-sy5?p=I*?VAzw?i2LaG8#!&Op5}R+I-+BP79)|!{vs!YWQ-<|D0Ib!8cj;>m zL;NZYZ!H61A$R+&uM|JglJ-4huUC?_-2v!~!;>%PkYo^rU;0ANd&SVe8Wf$`S<$Wg z?PTmo!JwLvS+Me*=iihF7&4$4i*CMHnrFkSo3|dNkltEPyX7ydzmpYry5n;{031Ub za-OXe8p1m<&8y+(&I(jS4gT)4Lkq7wT(nK9V%s15*qj$gqyc+f2uYyF#k@#@H9PW)%nclQ%`d4!QDv(bk?j z!T9oBsgm>Rs}5ePz0MyxKgn4lLMY3c+v0R>%PE3(Hh=42|1BK-Ux7;x3=l}AA0!R< zOkD~O05|K>P_eB8U2s-#)u(cwbvf|DC1EL~_?I6U6>Tu%=@4VSvdVT0FuqeXN^xB3rX+Ug~^88ocw9=Utr&iVD~#dF8nuM4wH=9@6$MqWaWN zKSKU|ZcyVe4yZX8AL||zAB_ny?HRC6Gfhb(9HxSFAD`Au=jgBV0u?Vb3;NwQebsDH z`|_%@k%9(XkbzB*ZoBkSt?3f>*>}z>vX^}hWp#pNdZ)sDqo6q;e#2XIX%%$cDFIP**AnT}6^K2B^d z|6wH9=ojgLATPJEiRSD}>uvcjN4hOH+CGFFRKlcMhIi7YpYN>t!@~3ZfX2fUibjAx zvmbo3jgj7sDZLHIv-BmB%mN8QC?AydGTVIJlB*HEUmWWyppdH(e87y3hqDOY1{V26h&6Y3&Li(t2raG(N zQ;^z#3bc}1{o&CZllE+1-r%Yo5{i1sVlcQsX}Q(VTRD8aGX14Gp2h0}WkyeeXr8DQ z8=3Hfv^_V*wsWhq>FYd!;a_OZ4j1X>U$URR@%ZvG-j8x6gHa^Q5_m#^<$M@v%UrMMaik}C>DQg!mVxi%+^ zj&i|s@7y7MAeUNt+znina@AUaIX>H{Gt-1eBt3BE2)G>gkT!F3J2SA2Z-hvWSdzRM zcXzp@d2Rri^!hA@^~Jp6H1`gn1bvEZ7YAC-&~+H{SOn#s1_JL_u{;%F=P5kS6neE5 z=OPTi`AI~_*WN?Pjk#2xsxbUu`9VYS!MVt&Apc68vu@W%qEwmqL91i&_{Ur|PwDD!2N67&Pp4BX3 z**pgfeyW^WdgLB1cHsBFPTqv)ZuDzmC0-$dx4Li>+G6InZ$C|N(Y2LWZn{X?Haiv- zoYM@YS9gP_$Dcj5|OU^JhM+zbur}dYgq*oFnR7vA9@KGc}vx-J*uR5*Q<<~@kw2!-y;LxlJ9&=18o#vdrDph>DYDxBYCgEn&&zUr@L$yLz62qmB zQ_4|+dyg*8U&I-q)X!H3x2i|xy<9km4iXFqvp75o;n$GvtwRO=G zLozM@`;nB8$coX=rG@OFz--Ab8U6J@5?}A9%&l%*nU$l~!!Mg1RC#KR{LmGLm9eU_ z>}D+wySx7vWp5c(b+@*CE25OrCEZAupma$KNJ)2hEkIhjS@fb2knZm8?k>SaFIu{u zKi75deeZX??>nAre{j8o5h5N6FQh1=)lr&S@Hw_>qsI= z52FmHNN4Sns~MED$I;}Ta&w|t0ED^`>O&7LE?vhv=$GqsHLI<)FUB8{&uC60^#?|p zzF-6e^DlBxNCPCb!Kct_;4q_k9l!7!2aN#%l9M?ymc*vs z+*{7NnUO#fnQ`F+(nmM+{RYc9NMegGI{> zP+*2+3VX%%p2wMFV)d^3R8O);sU?(Z*%ESDM*v3ohl^NJj45@K1E4a{!F=zlKZh|Y z#Trd?AgcwL&%-v#h7MX}xv4~m^!?p=xr>k?)q~$o6NyvB-Wll%-fNWdL2G9&gxyGz zn22fWS4)&QJPqR$VyE%3;EHvL*OLwz7>ci<_yb9KB(@Sn0;~@;Y}G8lukB`p-?hlIQuV0RqFmOJoD>Eljf#5${9M;Tm(Td8KRo*Vrsp#8KV z>FNcdx|V3SJ4-0pw1!Lw>u?|ZG_2%t5E)#zeNEN#Vsf-++mm|l(PK>zE=l0*vUfe` z9BhYRe+~!!M2x#Dp56S^h}n7>pM-g7 zrzF1V3K5U_lk)mfisx)NEVC=2!DF4xY$QFMm5BqOB@VASRJ}IJ#gBVl3HPOY%*PU6 z2mAe)1Lo`yTTi7dH#d-+yMZIFuOU8`-15Hm6btfkutQ@z=8gNXYn-UFaD0i9du3m) zNJl=q0!H|}Vl(oWiJf_+PJr0Z-E0So8jR(4LWB6xZV_+MIio=GZV~fUWqk7-5_uZx zL+J`E1a8-K2)8@O0b0I#V*>7z9Ezko7v;joDvTrXFWj#Io;I8hHY9Ln-<8DIZG@(v zjRp@VBZCcSGKTrF#oWvumCVCfl^>8GQ=NQD;SVZquLqMPoOX3U1H-@Din{_@><~s9 zTfL?Jk}jQCE+XG@^omCksnZR=UD5l_F-1ziR1mArS@N9&Wx>)Jmhx02{|~Q(*-;7 zJj0g3!)>L#Ui~>GY2D8N(e-lm(0-~bQ`ii}`2-(-QsK7tUF+DsgCj>VnC%Y1Ish60 z#np^FyW{3TXMBL8GMDGgAL#?M_i!lMls0YmywR}(mt3DR0?DqubVpp8v9mp})OsU{ zEj>GLot=yTfx7|)qqgR}NG^TQ>hv5z59s*AlE+UrY(0pivP83}6`b-FUq1-hkzIe^*-VGFL$E4Fb z`ZWP|@Oq{Ni1a0S1u{?KKa%)Ks^oN7sZ0U)yoFAzBYE+HjJitlNf86wU`eGtyK9f*ozG z=@kTX0M3^>g4g~CXQ6|TJ8&p!3>|UHpo=99U`5M77Jc; zziMfHRcpPb|9IIB{U-1Slhub&R28>XoD2;o40yJy>Clx;{bM}y8GOCc?xY?1yYxr) zMLX6aS?UO%=FSGk5TXW4{n-C`0JI*m(0QwzV5Y#ZMpBxdy|FFDi+Wks_adtA>4^4=#Wu*!-o5SPF z6MD*CnYXwQmmxk=fIsbD4ra~0d$q70R3Z)oh+)^x_n~`wKE&G-`HRO&jGKss@1PS& z(kjLXMD(#B-5x|`oF7!(9pXaey|3K=Af6~kZOxw{ma~q8I%IvZ>Y?Ofb2xk6xYrxV zN%6SM{Q&p1^@<^I>#7ROl(jfc$8}8x`N>IV@n1zl~C zbpXL92U>3zBGrcskK51qMa?+~nXKv)k4)lzr&h23DLdxjS7R1od%)#c#PJv|E;p3O zif8OyDJtWWoEm|WTVPl5msNS;qNz@QSl2C8Q9xGd`OHikF7;f0z#I%vW%Zk_t^mzv zRa)BO!F&@qoE1Pg0%r`>w-%Q(scA8)r>o$O63oXQLzpNCP+b>5-OUl9$f&K>3KZ-b zU=sd|0^Myh66UnY8NI1oS;d~{Q3i^#&na9ZfPI06Nyf`GZar5P-BvzlmW4h&!FN}i zX_pkEPQdG9p*O;v<%6p7=o4wxoDK?i1F)f?L{98Z>7=aAEP*xEoo~+vEGK_TaRL0= zvf{;1W7gSrt4=XFZ9FZA;>lU!_gAr#!LyBYAmr_cWa%y66TFxR!Tpnrxj~%I~$Xwo-H^mRmyscLKX@^Y!`cFy{I%r zv&A(*v@KCJ)>Dn~=Lep4RHj0ULS#YBXAgoUGTW$tU=<{kx?r5aqLF;Q?sA_}c3rsM zWV9P9#OKPHzDf8&3s(w<5U#fY6{*>f% z&jGEG2da|;US~C+oPY(ErIB9J@;wyC!(*cVqztAl;Cp}K>K7b)$WL6Zf!x68(B{1JHh^0pW-_!px0V28040_135^HzePF zJ=bh-FwVKSUL3wefNrhI4{8@3YIz=NIM)!LIeAN67ZtL&cw5zX^%5@)`lGcItGYp$ z=GxfX1}_2w%E*mQp#z$otXzCrS?kvEC~x^ZWV)pEjNZ8Vdy@Pqo}jFxeRX-EL^?Y^ z6sU0a$6EBH%h_45hVoUz)HhgF0x{QyME*l{dU;xjtf?_+hpOZ3)xLg-)`s-EybVLq z@Zp@YaDJ}BAa3p{jv!-Pr5*{|=o0bWD$3^!SQqiilpT{<>Us8Yp93rfBgEtkcElz$ zYIzt126LkMg`}+q0`kSTD)l2-vZA>K;x{|KqFoG!fWeYf#TX0bBa&Vv13g-7_yJ&0 zp{i+g#03szy@}x(keInLk&L2xO;!%1ykrj3_#}zs#Yu|L1#rixcItT8U*{F@RI>)+ z`ArEsAQ@KE-G6YlUx&}^HN$*3IMuOt(zAz?`F1}TEus_7Osid@{G?^S!DnrMdUjt; zzwf`^&akCTweuZG`?eJW{<41vUkCHyR>Ye+Cel%#IfxmV+Xr0*|ZX?!~>~ zbjzrfC0;11(@{!}sdmM)^;zrHHfMI%pt@-q4sSQ3cH^Z8+qq2Z{ei9K<>AUf>+NCH zSXa-LvI7#v?&?G8-1coKmfGHhG_TL*FGM|UB!aa^h&Nj>X@B*cPSsqeQZd{_MS$B3kMIM$LEAy0y{^A`>;b!G-$=fg^|p;?V1KVFR@+`FW5Ra|Cu zLramlgk;I4+LAYLVg85j5Lc8JYt5OQh<52u7d4Men{0)GcP0xAzbzs-m^oUKNJ{TS zzICoYX`D)f_ROum(f-=FV2l?T$+pwXZhGj;Za<{?=Wt<#x#?H9XDyk*_)LHtS%cz= z+s=l=1yD{Oj>&osZ6U-+mU`SbhEYbt`wsbg^WoLmHlM=nkGEQaE(l*a!8E6Xy?r!t)4iIkkkAY; zZ759#H^Xb@M`I7&tFKL2Xn;My)}ok;%%I(FK}o zte0xJwzI)j8{HxCB)@%8n9D`c_}{PY7O|WnzvTAGnS@X`spE7|xp=o>sO_|4G8aKG z)od8~pLxKyrZt##=G$8TL8Nron$$GG26Rzgh|BjN(eDqU6Gs=EvJ@7 zU~V*DZHutT=0@_sv{uCN*bJWW^}KqGB4%;eLZ6)Fh;bQycrpWcb~+2MOl(&R`gUVE zWet@v)?htuib~6C@dY8Z#rr^G#(4G$q$Z#Kn27*#@`6ub7%ntk$g6|A+Hv>P%N|3m zH~g(3r9|Xwgk^@K=CerPfxi{Aq+`9H?y1wwoYLS{^cS_Tr=tFWVZITf<7R&M{#NjA z9j#VhbgRclT+~_tGUV(TmP)|wW62~H&W8kS8=#zx%8Ndm zZBz}-L_t}L^{};BYh9uFoTvxX?u+ic-nRaN{!@KzeQ% z{t5r+rJHEfM7G3|d0v{yUl;?Rz&lSXNc5Z)Yt+zVYScdi!e0B9fS7hGV27QE+yOA> zTjqzuU?2!GKz_6=5@u^4n2PGMC*5N9QjiqMN>J=ZWl_Uz~w*gI}D(NxRl*7cBr)r`B+HD91V*jGV z=`s76tF}EX`cO#?vgP_c27CB_)ArcV;9N^)+(`CaT_R+Zk7(}vX;ih)7?bKFHtr+! z{Pg-5(8799Y2CApP1YKBPrq?Bb~N)@yHPy4!I~^^WUCoUhH_2o_ZuhwJ#P6Sa)1YRl z96+&f29%2|`UuG4duYRdUBkx(J#%5yz7T}da&#)-hNE*eUhfRJkgU&!xT95UDTH-V zLi(edX6YQx8!Q)QoQLP`sW;0CTSbnFA`5%<(barEr?UshqqflTEmv*(QrQ-T-_&jy zFrqPxk^r~VVn)G432jTDrw#6PzHUq)D)XkQTBsg zLpWYiK$^mHkCx&Ui!XAgoCpa{c%&9x;#Fo>ki;2lL>A8!{@@tmuHU!97sPB862Wx3 zJroER^Mhc8ntoFE9{uiD(WH*iy7&{6SNnWd6<>#0BTTzVq6I6aGxg0C+7afr?wMu2Dn>}CmgXKi3;LE}UmW25E!WdZ@E=HfyM5fJ++{xrc@CzbSUA6|C z=gB=U*>EzcR`SjHw<84xUZKJ8cn9vxmw!jY$Mo(`XQpXC)|_SU#eZ1k;28rQPIr_x zd3>I>pLNQCf~V!rfQlN{^4-|U|B!~3#L@rFTTpP#Yi%nkKvt|h0SlxZIQu;ie$XLk z#Z4xp!t57C*PGr9T+GL)9BDr$Ai|WSn?4!;`S}v(Zj9g1XlHtItu}D(>XBrADc#kG zj4}<~La3MjF3$ROgA(^iBIOJH-Tr)fTfrLZU`GH7=~nHrbokfw>HqanosaDEO}2`j za*YKaZa03;m)hLl2hHddnI-R#VRKb?QiH|S>A*;LiY?<3(x0YjYr`L~IyRy@(MSXr z)*9bXh^hdT*K?rPL-~G^zIrJFq0i^OOFS%}(V|kep740!S8VGuJ)uol5)a)nhLu4- z+2&Pchbw$Ie%uu=(9(DzQr2Q#RBS7vT@aioFoicbA*gUMdsQlU^>i?gRb&e> zQanGQ-de@czk4?DCX4eHz(IQQv*^C^AR90(X||CT!p~j6gC||c>=P%=9@5&*rrDHd8&Abg4l+;8qr9%6F-`uUZFnX` zR$jdk^RV3Ds6Hn(OGL>0Q9&C!vYUNUd4tcUQ!z7i*f|TWsRM6NdKOhIPRI}m2ATJv z-f0{*yCPOw^p{DT)Ajaj{sA-$FB8(UVeMkJ%r}nQ9%oyXc@4F#?+rxQT6;&~SzV^upTtlrw zNCUXSK@kh}_SxDF1JoFJjWy#nITQ>|3RjaYY%p8<5u zR&M_Ad~CivsCFkwR1RcSNVi?$Dme%gI{a~loc1N%ZQTh#JFG8Ee+Oh{_mkhdFO?nx z$XIKLJ+@Ck*-~2|DkHQ|+NSYF#B!}xHk^O6VGb6G@|UcZy<{lgjE%&>XrVOrFOj|X zrcX)9diPYtzSMh^?*N|H;F#S0+K%jdu}0M_Ptfw5w!O~uM99{`I5~BO2wswxr+cp) zCsc%n|E!Qny^$j2sSQ>R=mz4GgHggSD7HYlnX!X8c&YlHZq9Ywj(A367t7Oi)(^g7 z>W_qF&FwtZww3@GX(G?}fvG6330eE=H~w9_SO$>WTXc)1YS*wQk*#6rjTb;Hzk0-U z_4$86CI7#p^_yfr2opA~8VX6!&G75G_SS#6ezyM+tNNY&l0@-P!*2Wk(a_$x-`hY( zVq8Dm0UFpdJ^{AI+KN6N9hwXf$TzjBv1}*lV?EO744xdxpb|iUsxZ!0a4yDx#i?3e z@6mV>V5M2e9N<9IhH;eK#5dm2SiM^A(V-Odb zADR>>a?wZqq}O^`A?|<$;2;ltlQ}^~q%9Zk<#iDq^!g|_q!Y!TiQW7lq52T{og(l% zdF1SHj%oxfTDRh@lgXF7V2V~o#mDoQjgkjAM!AOm|bBkL>kmn$tYd~U;oL**?bjBgE)iuDw+YhZq(x#U1nJ-p{ zyn#*4@YJHTt*TOxj_R5$6$zs%AZ~cw-^duKf}hZhpLx0yUjqz}gktI$qo|`69JiJ% zZ9SuE4klW{JP)#}Hj5>#4$OCCiewC505<_@hO1MKfX1L zmF!l)a)AI{u!0gvDxWXD%@3oWQ?AEc7g_+CrmxXyH%@!({tt@#`i#ql z1{Jw=La{b!V;NrtHC2tp%w#Lco`ipa)kIaB-NdA%WQ-1F*~?FvJ-Vgk17lpp8Q{W- z$_XUK_{`t#|NOkadF%7-vXUHcUefZnVwubcy4|VttFmQx$p*{J++-aJEsBeZJq5`1;Xdn@jpBh+a66btc(0JDQGNgW{%6u zo5$|`aF-wSk&F%(Q^u*W3`ltEdeX#uv+n`Cxdyl;b`yr-WQeYp50RFR@uruj(>#|bMzC_lDPk@v5LN)+IoUx z90uFRJ2rjC2VT0egT7t!p)*9GjB(GP?#?lc=C!hQ3EUX@%;b_ZMvcn`l+q%0M*xD8 zW|OnE0bXqW>qn0Ut9V%tx59)98VgY}$M0|3EQy>YGpy!fIoGw&2U#lt)f{`C+{EYYeLL$%jKW~Z}>`8{e3|v1rumw|H0aIq`hrzX{Fb_TNCZF z=5nKxrM9TbkT)=zKAUH|X0fnEz@*+h-y1=wDxN0O-LF0LQ8l9}LEHK-#=Gzdui=r< zzQ^%atA8P>8aSYoYlYHC*wwZ44pLMf_2N?K?)k_BM8^cJYPglzknPm@I};`3^W+dF ztST?)W4CA=9w`hv){~ie=7%WeKLb%)cevwYV(!*h2iNpX?rXjJ222{Km#^f$p z7>mYpaq?S{+L7dsTj%@PAhawFI#mK0_p1a3`rPG_AD_|k;Eoj>h&9CMNou7>gLSy* zzf`D)9b@F$k0L&!aEn49XSP4qA1&c-86SMBtPn@4JM%pPRz0TSnrLdXVccprPT4)a zp!~to>RRNBXF=Ll_|>uG_(>ERhC%>0TZpXI)_gfQ5n+l>B zjaIRkwW8lEnO)U^I=&n6)EI3gsi3WLJAN?mhOe%A_mwz{qRyw}r?ntyK4?b~@np_%61T;*nkajh+3x ze$YZN1|?tw2!;r~QY+UJhK-8kp#X)t*Y)Pf)TZ&&xD?~eL2GA^Ve4qam+Q;6$CX;E z%-F@&r#@VMGZ$5Y0a=+{?UC1IQw2xY+QY>M%}OJwdacFfZzbd!!0sOzmbpc!8GM}Up!H&2C7@){Ch=(>aYTMnm%uXfz*$wboia0vLqLr&g z6TD;9T|dLk%eqvdEl*tW7-FhW`YNXP0T&KsJ9}snU;}K^L?v*IR+k$tz}|P+9Z_mK z$_NuRu7E1kbGlh;x8B(ttNPL1kgVJ;5;Ze>Fw?V1W9rxu@5yb#dZ~iJxyVOrBFnXk zUW#FY?b`IP6K7^`&sSzK1iAoOtCYw4dUSstT9$6kk9L@BwBjOdiq7LNNmfV1>%sC| z%`L*5HZC@j)T9rLPf+*3r5|d&F!)%iC%zqH$xMnBLaXU#bN72pd_&55j~gUJ%6l{% zTh%t#3%{PB-Q;2#!qo6HeUx}zfS7z+2-RoVH`TpYlF-BK@#CY%3A_90 zwYmMM;C8COB&r}|6-0$5_OvlA)qD0`wvExMsV;nsbnY$kK2{`mr#Oi_wvr~HBomsP z2lJBW%axEmqPGJg!%CkK-oPwDw!-;f9>+~sS*n@nt2h0H5MbsCEO_nUyfRJ;Kyy1~ zQFGh>9GZIz*9cZmia6RtdtO@IIQ{xLBI6n=Y2k9Ic2hEUf+0|1WI+6+M^q3PeW;gT ze1h{acEq;^PK$d>5xT<^qTp!NAFC<)#ds_*Vzf9B=E%GeE5nHaQJe18I$tkq z0UVwr`qEFUzRC{L5&l7JKwqcu6i+#0@nOKi5ywPALL4NK3eKd}MsVT__Bc@zz@ZkL zP3G939PfOe0&e&N_so4OJhV$A>+X9A(WHLf$5RClNy>S;(mh&KH}Ul!A9pxaOMis2 zmCvPvisR)^I16>GF#gOJF<(5U1HyVz*l3g-yHG-Bx71E091^t+t3;nys(-XPSy}hn zGye5Q_T=#RiwiYT+VVJ(%u!J>yy$(RkMhqQ_Whosy=w$ zfZTyu{VF_V$NMwouPuS=5W4IqQ#>iKN+Ub5a1F~E0Wu3@Yfh_Fr*S}lt&0%}ia>M7lP^&k%lJ)E0Niu?5MR5T=3M_DAMm4;(IJ=$PNLEIKz3LKWECV6nZu@YdzjM7%DgO~6dE)xnBVif*cb|O|Oqy!klse_A6}hyDH7U4f8lTV^rctS2t$ymP!NgHh0(pdJ56p7NaJ^L9kvSk`XXue zKUh`Xl6vyI!Dwm@Mm#&M-sLh~6)Cdj2k`)B@@V|zXVU@V&odl`x%u1?&A-%Z?hMym z*<08dwehLTYpUcac>ylWZ>T)^>U_7rDC-+V1Y*-^jF)-OGc^H_*l2J6XyNW<*hZ>% zI}Er`m&(UEbF`P{KXM#eFIV>nB(;sNzDb1T-WpSMQakG=T{XuSYiFzw12qA!=X8br zJuom5h;Q8XINwEsH?=N7gxlC^boam#6+rfC6S-_IA4{T}nHM%uvDHvuyP3>6Ujr!S zFqz*0|D1YL#(HjJ(1=aqQ~4NBdwflx6bKyB#Wx>T@tex+bfEyqw0PvAeu2;m%w1KN z=Hq&@mcgn^`+-4;r|GM|zRZP9rGU}hl+WhPkL@K5FaV)1e+w%2F)Hmb{f1Ud4*qG2 zuuGtM%>c}Qhdt{gn9!(*3#u_N1J}786fqn8nA6~zU++V75fb?va))0r6Wrnf0O{Wl zud3t)VCOrj#qqo)g#4W(6oMr=T|s=|Zu3hL*mfBaiZ8`5wL0P?L)b)Vd3z`eY)o@r zveG7as8L=q(72yQml)7_TcDZ2I1J>8VD;*KTHKxQM=Qi6Uc(b^X=ED$mLh2lId!UF z>*TORs8KgshXh+rY`Vh3UPTM6wSQftO;~dFd6ng&4g1u9C657g*GQ2# zE0Oo6G2-=GcB%&v;kj4LU6c|;_Ws&#yEzq>9kdx9n1V0UBRLAZwJpv2A9_9+To1^5 zVG4A#B;6mnv~j2nUZe9ozZ+`13p)V(e7vrQbhjvtgbkI0x)m9rINyDP;m9|u>|F1C z5J>Vdd0TaM4d8y?*R|bSQ&lVPPJe%Wb;A#I$qXSst3?&HWqvA+R2mNf&W)>Vt9=B8 z&|6Q=wG+kV)OH6uf5V>8&j^9oDIO!cAQ4C%3BP-9l&-(v9jPl6W2u!m#^YWFPyv1) zA&qn%z3zwj%+~`ZB)+(liHMBPW{TC7_E%c`oc5=g?;f-`cE~u!8v^j}ikB)JAtUK^ z)h5Cg<|}+rHW~@e%LUBW0m{}Ib)jR8ZwR}NFm8C862z!%W(p7{rOU?oO4a|^)LJ1`KQ@9{&5s|1*!}sC!w)6E3S`>8l6{0&Z#c1?A(I&21fo?jm zkYcp1=RP-zAb9t^(t_(=Q)%HT(8s0s_W*+8{-H4a10Owq-CLSDkdiZ>0QdrN-TT5l1fQltZ$mjI*cUcrYBXfzlN15c>UN`!aXJRP9wSgkf;e(&z^YSSo%~>k?GQ>Zy zB0DR!GqO|J?S|V$LuC>j^esfT=ZubisIoMrd*tcu!g&Pcv9dgUI&P znJ`9VNLtZr_a7Oi;>~@Z@FN`WT!T5oz#8{4e$xx`m)8i~uP3h&-|5aCeP+UkZSMzD z;f*=Yd}gkx86T8W&n~ntJkfl2$6Xfy_Z^3{_9Tkk>=kvrZ2emM@lMF|9jmD~Fxf7a zBC@WU`~AN89WLh3n-9x+FAz`}5jAG0zhG0jzVZ7iZa_zKirlva8MgJ@*L?Nd4^7U0B!lP%HY^aQP-GRqa``0 zYh#Mx%2hi9E(s&Xa>}lNSe+=CVOr75+zK9deWuaak+)u^X*~011ZRowK;=`>+F+6m z@Sd0h@KG#oAZy!}MyGN#0rg7xOVrJe<9+{nH|qazAJUvMT}l{t`U&t_6{1Mm(orl4 zj8(vxJMQ*_ygeo0{{%=~&2InL!_((A+yZYBs-!S_u!}wl=5;%=+mBc^3mIrWU`wK_ z4K&2;9;+X}Kfm}-TM}=eZ??$2oo?yz{pji>b3ufdioE>TJjW0icHl~d6F+&4PaZ|q zTqCkIPU3dB@tcykb)Ia;b>rZQH5c$phtIZg=dJ+8WbOL_12MOY@v5(0TY40N3q#uvz{~^A#hHj+ z1%fZ0+Ht9 z0^4=plc&*#7o98^(}1`_3o78h`sKIjHTnGZIsq7R z0FYHu8(C@ZQjbCm}nL!^=NxVM4dg)(1BXz1?yYiZ*D1ESm4P$4bJj0R4l8|30)t zqv|U?X&C-<+H&lZu8{vsC5*{bQ6AV-2;#^lVv{DigqO zcK9JI#ji(B9%?tiav(aDK-F13eE)NCT7DY`k=8WL>FeFEWxz4&=ji21&>K>cqg?rP zb}@L|j|k094wvaeaX@nqN*Ns0As}zTLM*VOPFXpniQul~6@=Cvtb^vRb)!E*Qju7M zdZC^Nv^wxB-l|>)Jzy@=>~=6u4PLl@he13zB&^>N3Z%X?Nu^zX!fvE0Kbx zl}g{)HKYg^Y%I)a`J+-RC{*fyLO7xDR4B)@55R{Dfy3eDPu%Jj0i=jv{*!WHWzk03 zm{6-Y!8)#MbOg5p8P6*%&qw%=WA99ih_3n*P7jFl^=tDPQZQOF#lVvK#cnn#Yum$4QUxR=)Ld#vPP)LB z;OX=Z`4pMcG14%SyEhP(*a9SKk*?Lc>5h(xLd6$sy!|SH{S!^U8OYL}ju{^L#IfLu zU=XsHUcn*5#gnOC@*Y}t@{P(|D+OGGzl<17~1u6qf& z0E0}6g|8-Y=xSHW^A+np;PyIhc(lX4Gu%NwZJDuPk`6Gf3;6biqO%;#e|eR}VZrj* zQ0EU~_D6)_DNgQVW8I6LZ_uv(~BNINp=$%P5<-AktUaq<%B)esou%a%8LURe2zwxV`w zU3@QS4j;tHRsS)r4+vNbs`g}|$8cYQK$UZ0{rz3)6*7jBLEuv?1pSEet&Ud; zd>cZ}3a|f|TU`T_pvLn>9F!6G2+8j)XNSL45tGb+0~xHxd=v0TMM?pzW&l2;?}H|D z;)hRfIZVQd-C-3^6!?;oJikhAn5gl&gX=>l3QIU-_b>1R*trZGwjg(pw06Wz&fFJ) zGF=jS(Eez3OcW?iV=Q*jaqCQ(t{~w@J3SA#^Szoe_qpxNkyW6jvG#OgLOt=4(vm8N!OsXfWnGl6(4HPl~t zYv99wsI~}EijfJ{y(Ogk$oUZ$&sG~b=owYQ6NX%0bphC~;W8@_Q_MlV6l{|Jq{m#G z63g2Y4ocGE9%^0etuze>SR#4q_)ecqcW(ioI$i~}qL1)`A( zQCbBrm}Qu;YqyE~b-C1>{#&uz!uY%C!uq#G zsopAfkvvVxf-_>g5-4cZcb?tng?(7)PIV%rm`|0=H zH;Pmf>9(5!Y&9^Z#dD!fIqZ}G(iI5J*q8T$VQlt^n=0I2Vae=+NWD+@8BhBVRy@~k zSBaS#@{`MKVdzsme^&xOB+<=g3gd|#`pHjrrwd}4)GNDp>MI;+1vRvZd^*XaY~f_q z>8-V*$t$$bC4Y(rzOJB)rCkCL4HUO_;dQi0IbvS%P7_b36e%>|yNLZJ1Na0986yG% zC+r}Pv437}BtG2|1_E6V`DtNw%s@+S{0dzXkujxn*X9k{+M!$h#{r^rA4Jm0O!=m~ zU}$HW$8{B8yAEpfA4o+Yr>Sk`91{FI1hb4_x_sF5OHbU1ii3)LhS%JrrFD(t{aj@# z!s5M!xq!(M(Iemtr4@)7Rj*|J*K5qF8}_dH-Ego{_25*r@Wo8o}6#FLqaW#uszLd6B=fA_k7c;I*1J zL`9-rQDp|ro5i((^cfBd#4kcp(h=6|ecC7K!&iM?qW`CPxXzQqW=p$AJFPw3(DO&? zU(bN$6n|RIz`-}ff5!y;gH;X1e$E`*s2uT~`Rc3nE-vur`Vx*v1&w!*6h!IEJttwnXyqlzw7eOfY1e_Gd)j6}0Rbf8L%yy<Z9Kk*dq$C zL+ENY$Y^U18;q=-OuvN76x>!tCPZK9$H^v|aATmWj8ldNWNc05wNj)-N!U**IPEYI zxl1LZlzz7`EG632GHuVOFO+rbnF>w=?DwNG6o6?^3BY_YXsbKgnrBel^;pzl?ydFJ z2ibHL8mtQ^Gv8yO)Mt7Ti)e-HA!G*q5?*k~x~O0hUVr{s5EHq82yFRk{%k`p2(98+ z6u&|OTh)CYiR|K!mVYRo!RvvC4(y+1Iag z7lJP&u@qq6UzYdbawc>K5*Q9urI?7yG6sh*vGrmaMra!z>B)o>bJnV*SM*?V_QK)! z_#*ovBO@c8t+hFtYL9A}=m`ZrD$RKvr8th3ZfjmPxsAlB6|Mk}JXZi)1d;X~x zehsP4`*tev>-?a1B>Y)5d+0JYJ?s=$(S97uPFtuqHtv0_Gk^JO%9^Jorw&kEeocBVtNam<2Ru9m@$)Z@WHBtD zIK$YZLO# ztA$RfJ;Qlrrs-&|u|ywHn$D+Zbi#Tigu&*x9up||anK2B{`2}{vG;xQzAO-nUqyJY zNoPY1Wf@!1rGpKbnjF}q%h!vNL%SkTbwO9=a$b7|bE_x9#~pZ;$c`S+prapT<>Mhe z@VG+d|C^xc`0_cH+7|Ng+7$&&xyNtP=P&f&HNw9mF){@XM*baD^$!!R^x#`75slzv zU|z?>F2U_^XwQ7W-|d()P&$!K4>3HTeGMKkf+Pl9;jumC%cwsvV&2YRZC5qN_3V4aAe0Vy;xGNQg1ZGFI_`#}DtkED8uJ)4!r&jK zqXN}D!u)Lh`&*-BUYt9dE*y+w^$z1Kn2Y1l~l>u#av5Z9?i5tHWUi zUtu=CKm9&F#wK>%_hzU_a1fdhF)a9^&@)R_8wM4fuREk<*g$aIl;^{%xLO}0N^|%n z@3~-@?D$KRWLHJ^`k0dRWQS^SjDR0aX#0!z=QvnXR#W->1G;W^HErw&Ui0;dlsR(l zF%fE?+&1b-;R(+tW=2m`?=RT4Nz`#32Mdd~O3+C7z8QSJFsn!V_L4$|)q;7{SCS%pay{Ge zHo0n6%L}?SEI{e}$CzmQ!8pu3vJZjZ3(>hAei|Z2>6O!V3gHZ%X|?!0PspY_A%$RII+|li7mt{~xMGK-MIe6c zVUIzfbHvQ!yV`l#g+`9&k0ySg-4LQA2dZRfYp4DCDJIcm!mB^C;dG-&>thiLO6$(a z6o2n~6t+sG4E&is;h#9yQ7-^6d~k@M1(4T#J@pm;>JsCd5DJ|L6V_f7*ZI z^Vh=d#AcKgJNvJ_m`9JROrTnV zJn$k2ZX4zHI;6agJy9qvv)u{Y3ecxe~e(W#*mBxl+4NXO1)%Ii54~Cr)Ls2O_sj%AHDv#!feHuzCEKPNI~(-`U)h zzG)i8>o}|q>qYL0OyZy1?wm-6D;OXf11v2U`JVoCVY7po{Lx|D5CcacM?u8I=%}CA zI0kX7c<4~dSK3H$JPXf?oUJ~y{vF05x|$CB%=Jx?>le#75CEu<~%K+;!l|Af4P7~VeRxqrO6)zfj0~y^uAWp1t0EKkxefw8mQ2T(0XZ$9bH`A!3Ci zZc)dv>Of)nvc5)s$ykX98^fi{D!};Eew9sA+O^denZw?o>sqx)H$mdKPKtUAEn*#G zj@reUYl;=wR6l3F39{^L^Ye?B$}?Yg-;>PzFqe8Bnm|9f!;diZ=Ow!L4u?=k`yUbT zuLPoKxW@;i+h<*5k3G|uw8sbkIO~5S88>QCd8XiYHCOpg(QSLfPxM%dZCed!&b|ab zi|<`Y^(FcEn1;qvSPIfYk%}GL1-7hL{Y>-qI#bC)t|b`mhGjuSh6~G!@i$MSCUHmR z*_)q^n&gY~u>`QcavfnTGacDf$CM?hE`2yGF;*v9Qmg$yT4Oq&NpVBTG)wJSMb@LV z<{m3Qz)6-K?j!tDmnnq{{;5b_&Z5F ztW}==`1|sy{oh?apniS{OS(B@=L@vn!l8cjIP$o2NJ#uOp58@xJ;-BOPF_wD{eTg- zK7N!vN|-l~ij~1pMnHDUpYQ6l1M12F50w6>bW{v~W8B=DUdL&ZRgw^!6G(ET-K3?; zGm=xNcj_PgF~mVf-Jys%Z^=6(e$iAzzr{Dlnb}a5#Z~8;hZVgz+)9!4-rJD6;*09 zLW2C(`3idiL$r~UnRWBI^f@hb;;yop4mu#$@RYYobkf;rbbw;T&k3R|+nDg`L*5=K z?ldB6)oR)Yr-V$)Lt!8bPv(zht)FMR^uBRW#~re?W$_5#U(NDYE-nEIg7X2odl>#F zTExqKmN_KE0b#+k_Qu9MwMMa{t7M1XUX26ecu_&V9)Hx$w|>{n+>AN8aaAl(F^VCPQxOrovi%sYu z!7?p$oPnPNxFSa;$_{JD_SODVl+9jA42NLVf8mA+Pn?Rv4jpo3qnOb#(w36tmqhbSrQg&I_9GxQFndGw zN64ED9}KTTNVS0}37x`UxfbXvK%VE@-z8{t0RN&9@bc|{BclCPB>vM)+YN>qMrywD zS3h=G0|ZNxXbm^-j;2)!siSO{6XD0ZxU)ANLwy%_=xYg=f7eDmcucI$B#`U){i5&W|s?Uc zGMbjTOySg#eRf#sOX~_wb}KJ3m_Q-X`@tGXDh^V28SiNpZDj$_O}GKbe!L|!HRSA3;3fw?iSV#sCic(PeYao z&Lfp9S}nXAzqkQaUh6+K8Lxgf8LxcDZv63f|LIKr&p&*7#zdiQ-8Ay%J$Z13~;e0uB&)$mB!Zo%qeT(_sCf{1U36wQyf*gBJDh;!u zutEKzQST)lcm3iJ)gXP7->lZMx|?Np2h`18AtIcA@07WlY;z*eXiu^&%UQ7$45`5v zDMI`-#3AJPBezz20woF@*JKpP4}U(szw-mLDycSvM8BbmDaCf#U=l}G=vI8WDbJT% zD|<2UHTrs^7xsQe?edHxoe#d;6xnCaL7}jnVYGJFBUJVRlIu@zja4C3PMHS6fyy_W z0#F=|;M3443MT{&x8Wxk^{Io@7?$4V$Brk@;fwHWm6vfAwhlzCOke?E;M14zkHV~4 z)n?;T37_~=g1Zcse<~AOYrCo{kJQ9Gk#*eX6m%RJBLxl|CF307&F|>hsas+Hwm`QN zDjxRIZ_qu0Rl^yy|3)d#{E7XW%=-O+uP;Z8dl@^&v|nwI&^?}Q3^_VFVk`O>@c+eB z9LfI3w|~XHf9vSpKl}E%u>|T(2fp z%V%vLelLlieqcy|zuB?6^;%?LIS*o?u^yGQ&PyME&Y9BvWP ztnNABgmsHx5;)HmzCP;@Ay&_~%#WGXBW5{^10I(+uQ}lAM!V0wqH6hO$b*BwS0itI z%?lqa;~b9F2mh?+Kh5 z77zTD-s`ovy?cWXZiv?JuXICx`h}=9Q|>e6^>=Bxn*{BvK^=$hlOV4-nEmL5w0CiY z88~RFSYYJQy5&zZGd8>ZTYS%kjJY>dVKjE##jH!Z2lfs79lb=CKqOzckl4=+DeuVn z{P~unmwcKMSN3iGDuEg^qfQ|*-YVy7VM@hA{h#~Q0u>C+(lYEHLlGp4Z$lW=#9W3= zhXVbRj5^ZKf|^ND5?){t*@A)39x+g7O~LM%2&tf&yl<>dI^q21vn){xmvnn`FL?;K z8H~4xxjz~LIOTu6zvbIN<5~foP&PfYB!wm;@_r}_PFqY9^J7c@6ixf~2 zaM`V}>SMA&J&-=27x7r6Xy`jGVb-7V-s^X~zwwUdulx3QAExI`yxTZkX{uX{(N#C- zgu{P><*T%FxVCl>(4`ko!mw#@VZqmBVcv8@D0}ZU`1)FaS>kAGcA^k&o_{ig)xxLx zm|MJDLq%jh)E+#x=xYF3MZj{cJ%J+u&qtK9%bOo^ZbrK%At7J)6Tjv*5xVE?X(}55MQnq55ZnI< zp8sD4dZr@9JHv@~c8QF=*Jw<)gd0$e6ov)-0%=3MP!yQ8diAFlN3`r7@!K{U2IH7; zH`@_dwax;o8l>v_DN`rl0lg1JJ+|k(DM}+^&ijRsfmLKZqCA2k!Jan-+9nsju23lU zrt`>Ove`=Y0x+Oy7T}yv3~yEa^3i80m^5{M)uCwunYACBCB({GLuRE~trMt9J}73o zcq2Sfgn-{KmF?h|=wL!Ox%Y_HU(;=5s0nt`OqW8y`jg(nTot57ygVTY$pMQB3=hQ9 z#~Mp(r;ZY`rrZ{=H(I%j*?<6msm07<4Ub5X4+@w)g#3{wMSss8oNOJb{*ey;#nb!O z#YYwsP+YM2yi2MQvO&jq^iDV3P(7jAyVvLM#02Y|k9IHaEfHrP1^}AAyg0_sCYBxeSlGm5k^K?=9756^ipd1me9%a~JiX z*r;EyxZw&5$wo=Wa&qrUv-WnNL-@;SJ$2#<+D{KYwz3te`Ow#NI%MU>y;F`~Cqr>4 z3#RiQ$?Wzisgsap)tJe)n88*%#krE~i`Zm~bronb%%PNs#o^2HLVM66r`?;7_pt6g zKns)iVaQo$A(_WK*%qNkn0^s#j+ndA_^J_%J&@i#U8KT-gFc27IDLycz6+$474M zwfG`K>Y*aH2!<1MgISwt!e@E$Wsrbut-VpW0bubbfH9L{mykWoLDQ>2mQRb`MQ|t= zuf}v~y(ORTD}}YFg1+15u*pzNX(^T(N}~$5<*Oq|+MeLoBaFf#E^$+F74Qd$?g=P5 zqW(Ko0-@`@=5H)l^FzYq|NgYhNjV6(lYGqztAtF^I_`3JS-#p5gT4@$Zkrg(EP}tc z-`}Tj`l#2*K9A4p1$HI{(t0%g;wP?;i3*pS!5;GKRQc>=(d>dy;)-5<#ad&72Lg$7~)`_!ctf4~T!zB*;As zkOq_A76DMwYV+CD_@ENr6{$3U1y+(v>>^XYTIf&AEomtK|5I2)Qs=k>VJ#$2eg40- z0P64CG(Uk8FoiP3@A=+mG4Led3SegZ0R;r(VihcmI-T?NH*9ms-+#@GTHee)d=87F z0o|%6a3;0v%+?!M#WoVJT>EZs9AzL}+~uq0O!fMV6NT+)qX)^#q$0T{Vw3E1)U=|< z#;^Iuz0hb~V4VRH4Xd3AqqSlX<0gUQ{BwdInfEOX7o;@8`61;Nm~UDJvd5o8U+b$< z=DMka7+gmTXuBrH9J1Z3iQxs$m4}DuCG6EeZ}ca!T69lZ^<1UcVX{Vr#5f9Vv`U88 z@&0PiA8Y*v!wVWWS^l_v|2lB}kDv5?d`5vs{o#6i_R3~MJLkNZ;et_5iw<%`uA0rj zeQcK^`4j)|W-_e}ia{KMUUQl-V)$NsEhSm+;)y%Xc2#%7l41Btz_LcW&@%QV$xK>| z96M};d@HbgeplTM10;k_T7=2g<~PvN%``6PCgt;|D{N#`{TY3nAQ3+r$`PeGR7e;- z&aLnEd~G4KO|^PlV8_E#)(KqRPR)^@Arj4Gvg3ZEpGe@c_U-H$I@+v3H7dhUl=6{I z;Qdsg^@=u9z$E5txbKH0IiL&np;S)Tfo5h*#R?o>e_( zhn;btOp><#TLXX01^;fP26Ot4vZHF$-R=i;RuO_n(z^~HNp!BJHkEV_THTEft_Fr! z1Om(Pzf60z9UavYRZT@LWU3$LcE)ONj?wa)_9T*-H-b1$G}g;Vu+=!^z&#zt$QHG^%C~ zK{7<*1Y-`Y-Ag2LIj>(UfVHdMCQS$(u7*DG-G3&K3^@-?vY++Ng1B0N*`pE8y3w)yfy#{8+6Wn2K+@T?8c!bJnt(ZJVq#hSN9vgER5?Vx)=eUYQ$ZkfXl%WsN!Zn4js z$>XXy{Z$!UQ@r+wD)>vJe46p%Krn|df(7xusob#zp334Pmq}~wBP^JD?=5(ew#J^Z zs}{5s8BbuhO1czHEPnL-<&O|zSDkQS7ExE0o3LZ4N6RG?h4H*S)wFwR23xRdZHhwO zPMVx}1=m+%7nMmf*YcLlS=VlXp|=~ z6}t=Sa+{wgxa-?WJBP;gntF*Z^ zO4)IwIXqC!aqTU5VO-0MJ^DE3!&+Z11nz(AF9Bbt@Q%Rf{_5}t zX$hlDSQ+*v_$t`+=3_~Nv#o6 zWj6x?`!EUy_wKuzsbv-ts~WyS*KbS8lpE>x@0iMjlRB02wIgugdVf8=fxUu}8xldGyMFJAX3wbGi;y#0oQ`(2{p-rwo-R6KlyH!Ez_!7suU`R)RQJ>|}lCn@iCKFVr*l zle+$bDE{r5^eGDXcX=MBlWDP0N*J15kLGf!zv^3DZUCB(f z%b;{s{A6N*VMAqPQ+7oTBLj`=&(?He-l0*k44nuPk10Z4@+CF5!?ALe!=YTN{T#?i zqaK#fh!l~7Zokw}Dc0?x<_VtfJX6}jy`m3g@4>3_TItG{zaqZn)L095;h7Mw zmmF@P$vHb*RAA*3UJAbzK3M5BgcD}6_vt4itYw|9zID&!wzKI_=GrpU0GNsLRiu3F zNeX>Wt@}Q?>{+GtS`)7^oe2h5R~bx`$5u8)M=zixn0p!;vA>~e6%xqqGv%>#g=j=; zjA`0-ppyy>%-*i%+{VcRBh~YE^_Nq4SyPB;n%zQcx^W1k=5C=)B0%NEe_-Hy1^7B1 zHdCmSJ-oIxF_I3>&`6x+Nm!PjS{P>>@me`KpV48lYLF~EtYn`F+2|22Y3qbH*shOQ zc|OgcN;=n>+63%Wrw+rDE}#Bh*IuiH((`J`KQFBrEe!Bj0!)a?01K2%1)dOe%=dd9 zy?I9oJ8Ah9(+?jFn#K$j=>I}smb4a6n&N94MqHBi=$!)5)^7ow46{zkOL)E68bCT; zA1gMdlW<4I3WZ%MWYvli6pj|C>ppRL4;C!b+qAhU^I2DL{CU@Ve z(~FI1wXTwtm93!Dx)E0QLj9)~2O}li$4~x&82uX^yr+%G?*Q+yI3vzOJheJ-{kklI z#k~0`{Ce6-kc49}i^n$#wB&)RiNq4i=Yxw9z84WB4AIBl5&|Q!7I!quGnQ>{l48OY zj{2JfpS2luG=2IeP210DaH-o>Kqd}p4h=u+9xnyPlYw%+;OKp`2!B{Gflc;MI{f_9ixQT+ zj;W!9_0W2q?r-*y3=E&#@o!j1kLKz`AI&#nZ`qMnWv_OGvuD1M_RTO&bYr`~oJpW} zZ4bL2&Okoct`B9yYXINVfyUf|&TY5zW2FYsvn&mo7GK!}ToN(ccV_Q?0jksAGpA0* z_y~k421zQ%-&GtSr*KZDY#Pe?ya;a;n*xLSpM)!8bNd;#US$K{T}Kb+H>gr5cRZCD zCQRmEsb3EK&h#R7Ge%g2ZNpw5MY8B~tG4n+3VbJ0iMo>Qge3RyjY;`v~ z?#0Y_yW5;QMB;Ft$=Gm(`X!E}4D)bf5#|rFUI{4^Vyv0k*K|`ilg$x>q1@&Rc%;RX zVvbl+%e*z+6q=Ge(0YypnAp8JG*HMV?1I$SzzgUCvgC<;ghhsJW*%!XPT@lcERLs{ zd4^GDRP6Ir5n6T=B&-5PWa}NiZeOCw5|AdQl#tVyM)H3uA_JdUkZM+S@@;eG@3;FwZh*9ij+LFooq&&r`n`>+>lH+KCf8Aw*bco=%hloNuS|Cq^GeQ zQ~M~vf$ynpZRW>sF91iO22@ik`O*l-1?$zhoXAo{xM^JTz|fn8=QR3H^&K%w+0wqm zYpo5J{Q7n+R1XE)+HQNApq>hgbXpqYC{V#f+-(~{)oaUf2c8?X@6$nCCkBu6NzoTp zSG0*4t#dp2XFTB$jHP`Ip#9!cG!J&tee|gE?dVgx{UOA_FggPT!Pqn07w}t2ls+y` zSut1uCiY)QCRGx0uF|rDzm{5%X=gP6{=mJ*=T^Pj>$wS56Dx}6r}5Rr{VUxcuj39> z{IZI+*#$%@UALtUy9ZS=0rzGZ~GXX^C{Z=<>EMJmI|1?!IiSPI~uIr<1673D%8dP8j_ z_l~;6_Dy$&*nKy7d-f(u51TonxBX*(dI>vP0wfjn|D-ijaXBo}e-Ge`>KOkfa35q; zZr74R@i^#o-up3Bdjb6kwaJ_RyNq1wi&s1HH`NcY-~Tz=_KC#Be`M8sYZVdZeI_UW z?M*&C9TlsX-}AnORM)p}^Q*ot`}&c^VRh8iPde#w6in|l1vD||J^Hg|e}t#&-B_~F z>Nen}QkMV;mOjrt*5RMYl66+a$hl{AW> z#iMpIjJatCtSk;n;xj}{l$nJCdg4cjCL%#azKQ`$-{7+}MnVT=t;?<9r)K*Rh+UrC zbTyDiRKeAG(WFCGcF8ZRK2f(TQSpTa()EFcD^WIm$CWOn>T+!@a&0>ClY^e8^`eJzB z4HUo$iP#m1L0%|GJfSW<09Y6nl#GfQ+$r4`eg`(5ha3Yca;t~?9f;TW5Dui;HI+P` zOGB%hC9QN8i&rHLSM}$q@X@0+;J1`QMLtwKrC5QgKn zO+F&-$U){oe3!Ms4s7?7}(jB1eIQ}yn4Js z9^)-+y2l(GaiG1-zo#d6*SpYS zJ~~&oDnZhT#4Q9KiHa<*9;OU=HR=kI4sxHSu!qF^9j795di=mH*9}^ES6&jyJ*XvU z=6J;_Oq#zJ7Ao!VmG!iXh5^1GZP)$WD?5P#3=7kb!2d7qc_UNNqQrtZj>5M$e*nR^ zae!h*cxRSqa3#FnFNDG-(>DneCeL-RU_{)ieEVfKJkxoekQA1GN=KPu7KA2dpkmPZ ztR6u7J3)|{pU zz63OI20Sh=j6{H#c5nQ<<5sLFC3nTCk=anY+FHZag-y6`X54zCR7#?_>oPGn{rgMo z0UB;iz(@aKd3UEhjFm6UFfvlBS0>g;Hb|}z8r%_%*@?^e)YL?u0%-ob{Wjwnyk}Dz z*1`21-``{)twYjqyoRp*qCCko@et4xOXKV}F>ayKQdDS8{7eFZFi;<$B|LN=5Pv^d zuLbIEGoX?l7F+VU0F$35^%Y%NPt~MrvWD<5BBPfQLu;5GJp#SGb$rcpWmwC=Oo088 z-p{};J@O@bHD&k3X~~K(^RJyEX?Pm!23{OWZu4aCXv1EAvk0-hL+7xk!ej75UaUf0m`205A>O;mW1 z#$+tdGf{>Za1LJ_$zpRDL3q-1JGnm^f#$hVS1eWy4LmN&>6vGX717K z_}cad5=6lkqyla=^_s5i{523JUOF@Fc9w=_Q*3v22a2r)zA*M;79^w$Wz9&+2WaxK zJGk4N1f4J8MxaCdDKY_rv2&EQf(vRbvY;~djY344baY;qK7BiQ$vbuzib-ZbUCLRCK-~lfqHOHk>#Cr z0pPl#+BsFbPNDCuEH>w}=7ledAH~SG+V~S*3TV-0q`MxyuxSyO>iimcj(2j;rk)cp zHxh926yC3FNU$dHWpvS=u+M!|TF*I;fAjdd^3;MblHVOvM}f9ew?Ai)4A_*zkJ?DZ z?a~~q<{&wl96&1=MZLDJZZuqbI-fv>InmiV2)4R75|jf>AiMa{Vhce}pF&2R#U;*m zoAL(X=LUPO`IFz)xv9_++6S)5)jTS-g&6(T((au)gS|6uib9GV-?=@=%0b)T!zf`A zzjqQE`JT<wsEb`NjA{5M%+*ktp5~H3MCOS3YY~74(11qLAyL6b#a&uQyK0Q~wrh!5P4uEq z-Zy^46;({oO)_w`(tf^>^k?!l`JH_2-AT0(93KwH{LOZaZPHdg2Ls9xWeTqgN;M`v z1aI4YtmLUD*z-Vo=BR`>e2ryv-=0G34BE6MA90%XP*KbO%AXMxDJdhd&_83@^o_q7 zvrOhK^~T;8-*;+Ih_ft_Kl|OsoNrZj;jgT5^j$SxnjQ3b^cA7amOvhx#fTU5SRRr{ z_*fO3UVulm$ky*<+jaXEj6gI49>J;j@Xg9Ace9lQM`e)vp_KI^#It)T2uAH}!xr=9DIDY!XrH~6i%f1j`3@i3gg;>T&hDm%}gre`F& z?&sAVPnadauwqAR!=j8{od@2RO}wC+lJkp)J2VD{F@T0f?FZ`&#W{(&m-FAw@7k%> zzYf(twMl_pEsqXYIgIGAGmtkw@uN-;B6&H~!JZVK=zg~LGJ)xxt<8+CbL4L%W!qHa_&2qDgc;f3ItSnH!s^SNh^<)i7gEP`K`mY4-Kfhd>M$OIb>6?zzbgn zN9}oW4lKckN5uQ3roZGpOT@7Uh{XO*aIj z3A_))qtBwc?=_$k{Z7W49^HydR>5HOMG_s?v)6vN8QCv>6Jy0Gv>6pM0hZwh;j z8YP^@FC2VwU52pZW&5GMOTDVpzoh4Q@>BRxYYC9bZvzkk!VyuK9ogcw+p@xGKjU`7 z&myrW>?DWmb*uc81ovKWdeL^8AQc^*dmBfAAMMm|Z?O%N@^VsbvJXEs_Num54LBBSVr| z{E(vM6N3BMcoxAsJXPCnOb&Hmn}{I>y904j&zD3NLl zWukAOuFWOoJJ>biiC^96i4WsnSPJdi_1g=^R-6hzu(%$Mzl390qln?{xi%Le{`W z{PuxRx^)kryuEqH0+JQ@mQrrFq!cY6aQ|L$joqQ&voMvlLSgr@YBD)`9EODBHu|uT zv4K{)Z#Rq-OZ6{iV3s_h9#!tYFFq9N(gYXk4NvUIY{EFA2pav-E^P~)5EcUfx z>YJ0U@%X2Cg_rs+j_p}Y)fys&huhQqTUB;DLl%1ln4*WxsO-5Lo=bfPprl97bnQcv zq+4EF)j4dkr8A_w#-EZ>#w>sabuIFTEqgLAF=)hLKU8Z=32=P*cqV=_9p~2RU4IU; zeKuj|%fK~5-}FM??M-tGrhRp&2xxpYNX`d(=E??D&9@^4|Vfpkn z-?u6db2n(xeyeK(|e%rUEzi_@1-KN|aC^he;xcma~&4~K~ z;5?6}JgzP@2gB@ClW@tMMFbOg;h%x`r3=S=K33Y*Wh{p~P1m zmFlC;zcSyjLX@xQo``If>^(6vpIm)JawT}NFf%9;VTs*hG+U_;b^C@GPFInLiwLPX z%*HatCghhdR{LfZIf!x1DxcgD!AaO}Q=hNCQZ9X9k#tU#QcBcJAxE1Y8lH*!rNyrQ z#$wW*yQGZakE*4pNMde2shTAZX!}NiiF2>Pt_o zZ_5v)c+%!V9usvRCKHp%cNy(J?h0TixAt{^7ryQsFo#KQ<{csVml+wY=^BtHxsf5Qx+zg(x^+B!sW-)XS6ml*- z?D%RE4zRU}o^jZPbfdOi_|W<18Yxt8Qom zF8!qSK`_ag$+U`NVhiZJMZ6F5DTHq&!O5UhUr;x;0vW;_i(S{k$9FEY63e9+a6i9H zQF99M)PmwiZHo^`lic)tKmaB1sZB)*v$eZM&L|AmOg=`bwi}}$u^|$dr!nOB+Z_~0 zgPGnbCO#ETJRckc%y-2Gt6oGhy%0e5E;*>db|NRx)fw)Yq+J%@*D~T-6jii)wJ+4- zeBGp1C#q~_a#V<|syuGW>0%l6KFoa@qym7!8T`R`t{oZz4zW?OHm8}Uo$|BwgU>ep z<=ffaKd}9cXFfOZ|tVPX&*){Lm)RGG|>b3Wl*4MOTGej9(`P{H;%|n^cQK3A8 zq-o?;_-fezvlUHR6n`}AJ~1xT@=`!f1}S{IWs&np($LwmqKJd!nc%R$7w%-Vfuqhk znMd{2R^^QH`DUFHfb2d1{+0T7%Qpr#uG}6ad>D{lyEvKd@?9elJ`5cyT_LaD_(5#9 z3e(pH7KWgZ!`GMPNaC|;3Vb(7Dg3T#e_XG|5@3e23=T^|p2>^s`A{5OpXVRZ=G&?` zx5n&>w;H2_1;jDU6qtIaDXY=4mBfpEEFcT5;t_ybS6Fwft1C?00CGH?Gb?^h(*rXU z_NiA2wF~W>oBaiM8&Q$rIfkC#`_XTu1a=*HT*B8U%DI*iIE25eGdDN$!^i zZql!lAa@0ME*9A(%!FnW=?J(b8*km^b5TSfgxKo#TJM?Vu3qDt{pP(d`OdP*$b-Gb za|O`4&H%|)2IAu1dB%`%Yg@@Q-d#4)h9*HG4Ya==is%(KUAf4wUXHEiBlf}BHbaXa z%cVk5y}YFd-rIz6)-`6t4D=rTFdyIX4t_4)DVp_o_v!=lY=ul`@+mD@eoHvOx{zNd2s-~p7NzJOJc?ujh=igOeaJ+7`Z$rLtdtvcz+QeaurvFKYCe7pyVNr1hk#OPfiTh*HL z?FN(ifs8mS>IA9d-m_=}cTNUuE^Mh*6GtJhB7m41(Jgck#HU_)<9my%`3n(Xqv3%0 zWRqTEb$+nYW+ongzTfR+CVF{G%qAtUvp^EZlgSBKpwbl8*aWOl%vSUrJLU>&_g}D? z*@3z8%U*8J50sjsExo&wm7mv=6aeQ`*7p;6so2AdNdJf^If0y~0aE5dqnUC2H;R2@ zZsC!&;~;E=AGY5_Lsz1e`!VmYaF04o7*VWNN7@Nyx?Vxgu7(Ur7 z*rSfQrk|TOef_}IA@j8MV;-*L%81Y|I`N8r3`SL`1q|{Mv6l^p15AL~iMm4|5Hj6$ z-?UH-829t9le95t4O`fc134}|dOPx#Y#XJI*tn^~qFaSdE&B8@kz$9>&HVs0L5dvF zG2JTDLUc&3ZXRsFu0#y@a#~p6StDB0R?c+RN}tTO^H>Wk{b+}bZ-F{M9GiN+>nN=@Zb7uippQ|>F>Gq5;^mW zB*w>i%nZ5rZWW(z4=YPl0@zw&T*w|0SjZDV7;+xe0wS82lWPr?5t-^p1LXj8*Aukz zo}MJP)HL#-hrVg$dV^@=XC9sQFhEt-1yIyFp!XW&-8=VPv1#+lQ^T|iQwlsf6f9~IK$WOWPkeB0(!H}3tU5?3YE z1+Zhi7~k|f=XPu<`h57quddsZ#APW|C95QaKV>rhT#IOl<(1vg1Buk*_L|A>o5{Vd z_g|fJtTd~V{OG+QA$inMShLt15<)u+)!M%6_IszgJzXrQM#56*_Vq_(*fQQPEE9MF zRMANSn$|ZHWa4n|7*+RivRjNB#o7d^J$v7qr56CrJi~eE?9i}kVKLMyEzn=@x9|`q z7N+J0a5BivXHgO7jZlm6y*D9Bt`SO?rxC73?wa)6gup^|Y7?{2KW*~s5|q(-KJfTt zJc?uh416T<`Vsc@Kiy}?$=2#KXL@rUjp#qLDv?D!Rl#byVOq6Pkf9#BcNnx8S?9P3 z@xOV1d|Se38&KhfpLK*Yd18Ke62j6zwAH=jluX0Xl)`aI)}T z;f*V$Cl~MrV==(=xsHBfck%!m4?>fmf9N|+Q|%9!(Gaar2Z{KE$TU!`!x;|b^J zgoV&^_wgMX01G%<$j;38M5D_As>vk0sn7Ug4KQXSZFRX>Y>Xt8Ow5gysb8;X#94!( z#iK*~LLRg`OFo_xKeQ8rBBnT#G9N@~v*?qeh0s#to}W(8nEqgbY7sfoQ2>ldJn;5D z^aya(6ClP&56pkO>|XRD1j}`SE0J{fn!$c}p)I8L`4to9F{`bKYcFxayp-h(PtT1} zJ@@%)e&~JZe=aO5v3iLkX>>HKg`P71@R``EZw-EP<_kyLS?vK@fvcd%$ffKq4&h?m zbe&5&d#ZGAJX4XzjH%@G0tw$LAF8f9Bm$3Gj@Ab6?ppV1QR(`_+_&8?o-{Y!#OabI zd5#|y&c&due0zTmu&D_5mn6lXLG`}+0w|t}Er`LQdDgNs6GM8RHiT!7ljWiOLwGg{ z8{7-f8;useior8hwFOv4&&L{_{(Hi0JCuoS7xQ;hxKL@;K&>fKwCmjAdI(IS70-7n zJyKU(Q<)O_tZs5jfIt24xs~*w-IA2{0Yc(z(AgsZ-NKZ5Lv8tNqo9jTWQ3jq%{oBo zxsy_Rc+n`7*B{nIhjmcF~|I%dQaIni4F&`UxVVwhZ zGXR|D>^{y^Gs*kGR>0y4QT&ayk*42F%Kk$rwfn9&D6Joa34m=0aYy{*5MMD zP6TJQzEMh_VpSQ(+uxeP7wUAEF|I+T(x2;IjrY?RB7}qlM1(w5hV(|DyB*YUiFwPTwky;A1CPO`!c3^ad#sp1RX5`OS+z>Pm1%tywcm&J%tOgq zW#5BI8Xu0sa`c7n-lPqs4~q=?qGAvG?6%bLMGJUfcdqFGDJ$`iL3{P4S`x_~m=uq4 zv9kYS4n{NuDoI(!-w8DF8tb?6w9ZzD?sQd4a5cD1e)sJYONdHy-Ot~ zN9vk3c$%GJ!L39|pr65yn2bPQOg4x%EJ;G#7x89|@hv`Slhc5V$fy9=7q8gIT87|s zV3@$DDYu_YmLZO^$8-{wdhdq5C6nv3XUV_F_}7Y_E(LbAKqS@3w?&JM{_fwuZ`Q)| ztH=4L6i(xRG5Ikf*0UpZS%w}}PLrdzkQlzJ2z4(#iX8M zq-YY^m9JK)@POog!YU$4LYNK$UTgi7B}xK+v-_U(8nb`7jEv!RC%FeE_?gRzg2QIi z8%(3mN;r!@H%ghZ`V?@Jet9u&QCK&ivT#Cher@N=>%TSnhl%5v6L7n>Fzljc z>7~f;O5=YK@Q zkBAno&x;9H;Ws~#wlrfU_V{o+00k&%EftEtQFR+mW)o>y;L@)KAxYOae$t4as6en` zB?iw2ch%!;(zvPrOAf@Rog_iPGqGI2+d%LKTTE)WKBoOa2|m2VthtpikDj;Z$X`p@ zQkP4@y@uVsUCVh1t$Ux^NIRT_`Q|-g%_O0v#t;q($Rw@{wy%`U7tx&3Rv@D5o8tm1 zk+w~~97Y)a@NCdHSBh5N`jxiBJ;;Bg`&9bNG%d#2Ww~KtU?tr1*I&b$ZqEN0N?iW9 z*BZ@PPrm2io0RwPAa52*Um<>hMz0ibHJtV5ydf$i$PR3(3bN7`^yy1CdWkhT2M>Ba zPvDU2=%thAm~lQ&z|zdkJZk4ch++WchnOgB`;N_NjXdK0g~lJ4Ub}BKVwRJDu>rz{ zJ}q-O-R|*8hS0abEL=j5Pgl_In_nE3P@+3ET;(=1^)C!{I7Br5LqEc~pl&%9;Sj23 zzNBS$O#)PqB*tk~>ab+!jv3v$qD)ZR4#MqEr>FP5tRyb!8e$@_Dm@x8doinb8$a^u zxRPnG*=>?xVcaw+p=Uy33eO#z3W{WovEBE6R3XPYUxnIV#rfNn`@0yp4*4OQ+?<*%a zPhKl9g_hRbj%3g#hMdlR0BKC~?dLK$T#*(ssddYZ;V;HKPZT+B-> zTb0u}8AAK*tb=TE*0J(9i0?uR-F)!OC_s!I*rSD|i62k$)!ZcNk?|U21?y`wx*irE z`byA8!~ImB<(CXn$cij-gA(jl3HE&#LZpY~cU6f>uXPN-wONm3eDaeFMyJ2Gg>kg?PBbK>5m3Pkno8ivH5ASX@mG6;HDR)B|$Xb z2UuXeI8a<64PD(VU5>R_7Vq!zT|u2|wH0E8Y0f#4KAF$cEiC{@zMk|-+C$DKiQb;L z_^%*fRu#C^L!Yy=S|2}0x6rH54IErK$fGbK@Ap!fcL8N9bdt}E#YyuHzYK%Nq3G=? z{vK?|1YhEUekvCYOWyEuMp)H2X!aO`9_@fE9O_2G)A1?34V$U)i%}anSvc*ijPH(W3 z+b}B%TU5-(XzeL;N~uDG zE#~LCZ9bCx<64YV2W9G?x;S*Iky>$VG|`qgHza(JV`P95CZPnfvo0CD(Ngm8^r7sz zy7dy5{KL**@R26;2v|sXkWpQ59Hb)5p2*MJsi2fLl2IqA9X88#Ck0pGO4-tMtjNq) zdht~0?yrh$g^fZXkF!g2!VKjDg4oU}m9J0vr>=hbuK6b$4@R5@ZvMp!pY3Apqr;0j zAf9Fdc5@+T<%{|OVV?aEIWmS@K#Q>!YT^^($C2x0suRrm@yxZ zD*7cq(Qt;tQc_=VhT`9Z-YM+Z+SA$x3teF?KO;+|5uupXRFrq)z}JuAC&f!qlDAz% zxAYYZZ|KA;ZaxsBm8f{JYqN?g%QoxOB%K7}f!$7Czx zUpa#zXDH~C&$rJWCw`}i`>?GQymA=?%qn~yATyN{$n~A4I~gdL*tkpDS%g0&o?qG( zxdBsRbdA;3ipLX4R`9!BW8jO*pKn(dLT*06sUjgE|0yX+8%KK|^-?+bWRA`vPfc?# z@$TK7Q56X0etunVO>&_Mz;0QI{DnW0IMFi*nF64*wQeS_q0YUwq|lM`Z5K0p$wLv2 zn)W`WVo+S8;{8=}ht``BkVvzM?Bm!D4cg!r8_W8PW0i~#KQA*cU`v#;=q^6lDH zq!eihX+%J!q*J$A>8Pp~^ zLbu$|UolX>QT4=bUkMD^(twxwsj5FJgy80#B; z-#hYoAX!DBdskwRm?$ayK0w@Ai=%Z0h|h{}E#6_%SR&s5_}C}ALGJn|gY$z<@(ZPvQWncK z{+uSN2v|FP%tY#Fr~*qXdrQITf15@86#Ux=9kOsswM%0@Ws^C~i_T|AOzH6P;4Ap% zd^x$7K8PG|fZ~HvBGVZ$5LPB(mj>ss9glUm3Q$yasJx1K^1C&n^$Rxd)-RqwjF-lr zMSH;q-)E^CZPAktY0^Elso%t+xj9Bs_5uU>jv;TYtu#KlW)jp;v_u;TgRg<>SmW^i zdLw44H8eus&NEV0UDGI_&B6|DAW586wJXxnPpcau4g+7oIixAW8d1Qk5ces5wzFpBVgYyhucHtfWlDDRDCp%uJLwrO#JpWArG zIJQ1J>1QZyir$8c5M{Xd^*w%T+Ts6HtNC<L%L{?wi!xRzF1PEsZTzLD0sf-d~WQq2i@Ra)3e1a&S@z5D@zEFHE zc_RDdhav#hWMzqsC*UrbJpm>v#Yh{fZCz4wp_Zbdz_yOlc6MPfzW*q1S}2&p{Y|Rf zK!4tN^^9HuVTb~cB2YuhG08tvWUThWV2PDWu6sGkSrVu&UuwrW{a2(d0N*gg?O54>~mc`eUK^Elx2TMfv=D%(rxZit)5Mqlf>3?4G zT8^TlJt7xCm6#rKRQ2X+d`AzEMv1vpZou=pgdX!9)p@SMun@UWZzY!LC)ATjc$`y2B8LA({ zuGr~~4p3F=hWd5kKR;8~y#85M5;i8E1qrvP*y;(y71jon(VU60loJIMCt&^8c2Q!! zLR?V_zq7=MHw!&1i*YHhvtmHGTBA!c6~Tx3p<`(;2KBQiS~P)l4))q}`MtJ^E>ZGv zyFdJpUVZXpx^4rF^j7=EswonT9L}4enH{5Np(Op5M_%!V=&uGFDf6GG(o_=tA7oz` z1Lq4S(jY6MC5BM%mx=pozJtmbFis+w%DbQDWA{8G*W3bR=U`MoQYohO6GtgdW@rIW z_CfS7OADOT={6tl#8UvOdQfaCU_W;gX>=ufABc6rUP{3gF4hEueTm0mqb%Ex3SQqa z*Kb5S*ozSn@RdFA|8^douJcUlGsxp=D)7L%s(^^4+_x&eL-w;qK#sM3!H>90O^P9K zo1G5O4jBfteY}}Da63Ot-N9>HU8PTRWH_QMA8G~=f7ymr9eA=1;G zNA_9G08HfBqRG>_Qtx_&edk<>THN1Yg~4W z*K`9+FfQ>DZO-%{j!^!A%Ij#g%pB94Hhu9vtW+QHDXoOa1$helh zROz&A26 zbn^@tO*gR!H&eJWEC0(2z|CLKj>-#IZ1MWv{LmG>q(Of&+C}T*e=@W4!dC#GQ0+!Q zQeLUhO*1y`SG<(HC}DoZBaG+E_}Yi8Vsy#Pl6M`85wokNH}hta^6nUH5lRQhNvGWY z5w>?36qK-U|$uCfNk5N0Na3f|kY&WS-5#hb<3 z>DrdKe!2tS*^54!dnx*^?LVRZqt#;Tr68s2)RHKy=IdeHBk2dN{QnY&d=?a< zT1@fmd3lW(xY>8oh^?cq8tMPf_4{|5r~mh0=Tl1lAa!b9L*;cq zf_Qs5u}IUu3hyJ_+7D6O{3T=hI=ot9P7{Ann`j%ZCgxcYkT0XYsu_y@W*&{tJq~|K zIPpp2MH^XrxPmJW@<8FNk|{q;eUKWHg%rfK2zPqp1My(eKt{vdThDLzT@321!DfoV zOqWE^p3JtMd2@!Z>LkT#ny$~XXwut^V|MBz?U)R#kpz)`4V6y*aYIO2BPlWmcFnsjAgsl zSyc>D zGHt|RdpYwyn=1gJ-{wO-rfla-!R_$ddnp6Ce8q%im<$dQD23^2@X2qo4a#|6EXLN^ zOCs|Gy?0%B=x@F+dwjPb(nG0Pwr;E%>ml7ddS{jU7HKejy$q&?>BZD4pUkzJ=5{oE z)53w(w>&8fu)R*PaD+ivNK#^{CtHW`1wB~vFAs)N~O)}VQuupiYQLznY4)9*=UtMzD8erNlB1Qsd|ZY0`TWCfP4&3LWN z!#GfJ2e3^CkO`yk#SP61o(!(qeoJIVp#iLP^+iB$H@^cqOhA^)<9`P@k%oV*q>3lA z?ZTb=I<&*On{?m1lZP<`H?=x;t5NkqxWT^2b!Wx_mmu# zG#JlS`v!;H&6v{u3e1#J3r3g0M`xOh^v9EVvn!Zbb$=rmv%R&LoY?<*C>z$4K58@K zw&Xfuf0X*%HOnc#AFH4x>EH z6a18L0MCt}(fw^dI;{a+hZh0I z>D~P*r(zXUJz=rzs$AmeM$w%u)eidh+8#JCwYfU$9-~I*58M#3bzwLC&qauk`;+do zS(Av(R(vl)@DjB*)n!ln*}@tEs|BEjuI}a;g=L342z~X4yI3}WxF_j!_$0l3v56m! zFyp5e=<1G+j){*t<*6RXBiuQ+AYgZj3SvmmhfkczG!fOm+))wv?0xGiKp-B+;(m9k zbu?XV2{)RYx8|Sj3bsTcA+P1*?2`WwmW~g#pTOH7WV3EX)Hr-!L}h0PoRAe8nD?Sm)w@AHH5gV7;({X#AoqwnQXOcsFvtlW2w-1B-d-s>)76||5m{7qXnZh==qza0cEf!ZCip)U{0D!X!Q8 zY-6jU;Nh|Em40`9A=G<=n3gkKb1D*Bck~tLMoYQu>!-XmY>@^hNp>BLvurLX@@40% z(DfeG8}uC22f;wQi6eZcMO6r_h3#suMye21bVii76}KL|rUS88->IO;A`CM@%eDMn zW>J^Y(tK}i6q5uko#3XojcnG7_U1QNq3&0mlnRKo?=*JSw~ZXs*1e(^i}s^u&70!P zOEazEoC3gD!KDGtaB=Z+&Q)Pw&5TV0Sc`2wVlOi)`QPOYkU-h=sa`Ud8!^%iB)o3OP}nn=l43 zUk#91P)+7gW~L4Gn~mh1zfVwfxl&7@z}ufswut2oR*|_py}eW`sh$j)(1lG} zs1I~=5oCw4;SH`;<36(=kRes=d~d2;;u;BY?y)nOf6qH9b{taXqX(LzMiZhD9Pk{P zBI3_<)#g5(=b7qz3iE>(3@7!gr7AHX`a2`uP>}LDNr>MViEl{u=H8JsGDf`h=n{1m z@qCF)XuO6R4|`5p>=0z5?R8($JYmFtDV@CGS3ITT@pZn#!DO-Mq$Bwh2vYvq09n7> zO^09Ns7}F#2$}Wc4_z%>8*UPJ&6UaQJoxPvzSh?M1euRpUKtCEZ&c^sz070N%a=MRKd+A%$Jihh;Knniy=f$hy-#|LL)aJ^}{LTTzzuxPz3!E?5 zNEn67nFh5E zK8mqhyc_04RP>aM?~%N<mExZFRHjebeoUG-9xb%|UVAfOr|hV_|i2q2s{feQTG zGDU-_2o|9{J@>op4b~R-5~K1`8?Yu15dAy%!f1sQ5OCYT`rI#?xeBS#pqs=|b?cv0 zkQ~xaS6hgzWa=^w$0r!)BiC2FyJD1lOjU6=CNIg6y-RzRKUj(itp4HyL!!_q-OKF0 z@sZB2_HrfLB!N6{74mIH;kwQBm#x-sEObRDj=bElBRtskZ1fNKY|T+#(F{YI*AJ*JYWdfl*cUIz^n#rEj0t-uL)~CC(2PN2=LDkAz_h zru1}%&v@Nj{*KS#t=!JOvdKDw@0D)rh+zrrP>HI;Z}W|$4XLdvH8GBeE+%l<9`{6= zrF(ES1KRt<6}2T*f15V%$08S3N0W_;Hn{|2clG4~t;3XV4&CxfGq;CHfL=JA>_$jr zqu%NIfS_r4rR1p4I;IX#Cq{f0$ngbGS8uq z9>ymN4v?l5;3Xw;c#e#qA61+QyN{@UKsC=DlG!@B{I0@X7Wv40$L#*dOhm>-V+2x* z&PZI>y$iT(jJ5zX;)20Fynq9GqMTExMQ%rx4p9)1Dr_o$rClxM|GP_GbVk=+UMsS|P#(4n$&90*0 z3C@}-SlO{pERZRn-hJa;T9i9-t3_tQ9v*gP4YP}us_yB0`I#lFMF~pY)B3J2l|$9i zOx~_L!4r7_PkxG*Co#kmLr-uzU61oo=^?QpdMu)OanL9?X(zSv^j0yqwaZwK`p#<15& zlWbVzEwi~L4X-C5pg0A-UB9@bUJ5t4O<|SpS%u)Ij0ea?gMSUXrrD9_L)tRG9+Dx) zM}e&pYW5cd@9f6YT|#X;z0nyVU6_op1UxUs)zvrm*>6wB9lhMB1uqAli!R4MP&{{A zuek26B;2jneiARcE|bgw68g2Cm{Ew22!~#cmAQMqXRjPm9WbY#aPL;?Tk8??J6SPb zF7OmBLKM@_yllT+*S22E*VvZb!g>64DY<21k)ta|_!zuS5!pPyygo0cePke0-+lx$ zwPg@@K~K^#1UZfHUaO7W!A`TI|8c) zM;bRSr|&VM+e3FJ3a2M2VoDrSCyp<%WYCUkP?B}-rb|8VzoWCEyGJ&a5$7<6%{b^U zGD=}uvnKJ{D8o-iDK!sF5Al!OuwbVy@Qq%fmq#}V+G>86i0w6x(o3S!C$)qyzHcg6 zrzakY%GSr%N=;rsPH!od=(#NUn$0E3DN%O02=Vo5glDXNI!FHa&DDB@V*2&I*+d5l z#>7+D{7xC@@nV_n$3^YOgx|Zq@-H@Yx?NV{jvf%=5IEa>a~n8XKkXUD0+YLHx_&tm zOPo|Tuh3nM@66yoh_#eU6yS{+y}p6_!LGk(5_6Z4EjvF6IjNKWv7lb(k!j-|e?7z! zHhPDz82VJSgN5y}M0u!txYp5a-Q2dl2z=#~iuWWhYg}@ahX!+&ZRrVYTr4}0;Ak5V zeZJR&FDK;kitN7)7`>>rt$bGNF3bgoP)Wzy!LZkJWA(ldb2FyCsO4tT?YnoHcw>k( z=QHYd?S{%y`=u#D7?X+=_UH!S<`c`g4_W{cyP6r9puk2epQA?!Ff+lXY#n-OD ztCR!0^h)RZJH#(-QCfLfcJ?%3|!Clu(w=?ZWwdw!7b! z7`C8l&8X|Oo3&Jt-!f*CQ{}pct%rL{9jxM3@cS@l>!AO;zW1$KcQ(%gRJXmaJf6<6 z4Ro26lw;k4I4^IaFNc9yEjmcAD0y_3R3x|IdMnvp;lTHD+3WrcTjX|*Q-9_fgK*~jRUUspY2ndf1Bc~J7t0k6@(O+?R4OTAZ?vjIZomS6TBw-X#= z{Lh42VaUL0rGl!)!AW3Ko<3!LyDSWybm&9T%9p2n;yC;0G!cEY1GEaTt8xZ)K2QHU zzHOFtiQ59b=`2Ft0(l|Zr<0H~a3fxbg2y?F{bnaiyCM@bONH|7Oei_llgztK*B!O# z*I1<3u*r8H%1LAmrmL^w$ObXrDLi(NpkU&ge22qfHrWxUGaa3dSy*DhHuHIa>^dJZ zZ_4cYwo6JCf{ZTYA(L)l(i@@JtQtYA|9bN+czzbAhYdBIVsn+{=DkL-lD&Xnb$A8n zH6b*V58x3%d5ZMY$pn`n3DzmLRQ<>B$DcCt|FjbEq03Y)BQL%7&b9Q*ayD zPNi+3GrH3-f%oB;N9nC&*T9ZK%dwm*7%-;}^LBXo;LO+N8ZPVx{23s$TI_j8VZOsQ zk$ksWc@pf?UIVe^Mre7J^kUn|wThF?t>qhq)6t}vNb3eKW7p$E?v>;sqH&tQ*EmW% znnk3z)8K&f!$16#n&2-L&aC$ylUyJ1H0N{IplYj+gt!%ihZ4EI&O>RraWTzvneW2g zfXw+qEFW&%`K??ZL?h(#s99~^M(Tc&7b}z{Ovs--BIKT=@95~No%ljpWed_Oc&F{^ zu((n6%SakpAq{bu1nEGsu$?vF+pJWd3*&8Uh-#~C;GC8aIC>l?A1OhI z{C4dCy}AaVpv&>C37!B{5r|81S4pwwsJT$#>CMOH?a}mByr_b=0z1?dpX}2cw@&7t z?d3ujKK~=K6)D#PoW`DT^g~REjAzW~jRS@AGxV&$*E?i+Mk6o>hwjWlU_to)9rL6N zrIpkiSkof5eg|5r4ecf~8p*;JEeOLNOPPm4oUb|XvN$6P(+a}m>!G84S;P)gzln4A zA+1(jDzc|al_R=)?dr5VI(R>kTp#n8`jrIazt5szs##Q3v5kthC+?5>H35zS37ln9 zWMk?J;0opy@;DUB(s23Ldy8y~94By=DMx^`!4^@=v=q~?F2oP`NENAz^AwrSlY={% zTOH2vcmwJ$NG$XdzA61NXu`KPHSuGOQ~D?)x8?cy-qX|ckx;k18ucd49xe2sSSV{2KfO#*0l9!(ubQM+Iv zw)Axwna5dKoamK0^vL7rM(rYZtpG`#)jYhdBDl)QF}ZELwD? znN!Eh5H-?A%a(@F$$Ay|T`6UV7@T}!8<^}qge2s)3Y=KLPdiI{L_F@~Dv5n+L{{qR zU?#^a-+Q_5@0pt~poL#m95@TVB@Z;#9>$^COfX>XEHF8iF282N$h=5F2^lYp+0KRN z|BTmn_fU^fyB=D^O%Kb#wb9~4>Ls(6YuN=$S?^t$EHcBUb!;|u=<5i4TN|Sc5GM({ z0}Q1@4PH$i$aPv^9i=*>ta_b~OP)j;|Hy;tVLIm`d|>XGb+_>7u&~Lvc!%0hbdT`f z{cz@SQ)C32m+dKGX6d7Di_GXC|s%VMQp^idT~(n<|W+;?3C;D&b*w0O65khyWg zW{U!7luMcmI_-gd*pP>_U_Q)(%%b_I<>q7-S(WSM-;*SRJWc2G;nBr`a>5VFCO!CI zXDQIHr;fKbevPuxOJp_65dD`e?=<>jYutK3=qAm-UnX{k&4EDExh*HUKd)h2NOL~v zKRd@@k*oa7DNmxE)uZr_d$0!lzX)l&nluMZ1-<%80XT0=KlS=AI{W=^-JZ zcfn#E39^(qgA(#U_T6J*$kxrXvtd@?>QU{xdS+O zK?vyLS>w&Jj6D(a(+*i2BGgN{PTxlpf>Ml9ool8C3Wgb@n+XPKs91~7I1$HSA_#CS zIrjjd*bBbJ-5PhE>v?;-eIHW-cow|Vut$#nHWC@m>tXY3N6l00aGa?0Jb^W3IvN8j;A=PHnVJyYKaGFhhwH06+_U zUIvsE(RT;Scg1)b7cIc}pM&jnMMFS25Qy73(Gh^b{&pjI`S$a?O)H}Cc5?%;Lz9W2 zlYb|l7P53a;j*z>wI0r&3$V2{y5C>JXIO?l#iVypcf;W&4A;Pq)i{iO2)ml% zYlVf`WM4LIdu!XL3Edv=oB>qZdg=7A2iVLf4AaLE@CTZGf944Q1DdTk-pHQw=8zme zUmQ&3dJ~9(xw4p;>+1FP#JUNEq6Pw5@UG$0Ci2qDH&8 zUNR$9MjFnSv_meh3usEj60vPW5UR4CQ_5cF<`%CdL_K3ZGFS9_zket3=(pS_45mQd zj|)=uv;Euo)vPlZ^g!~TE4ApbV7{2*V=#G!5bxDXmp~Pvb9yXNUwN0VcZ$4MJBlpg zfoAw#;KhEKhJx9Yh&}K$61N7aYM8|A4X=(II@!| z(xQ7>K`hCrXg(;f2IED(yxpue$FN^KwHX=R%FuC)sPi-zE``=re=xj;MR<{M7wyN+ zyo&C7U=%Yq9q(;cBu|#s8LPs9Ljf$L^pIq8l-LInT5pebSHYAeCwFHMp)i}=rSgI4 z#cWz6Sry(_Wx`0jXTLj>p5<4hxL)|A&*^LD24r@6k5H8;^xBygix^?v#)O6Tf(Fk{qrFx^zwTU}OZ# zGJA@8ikafFm6BeS_1zCy+D{B)E6T^1adr*AdwWo8GV0*4SX9A*mGlQbJ9*Z3TFD-% zgIsQU)smdku2bT^j#@oU=(7p*=QHE$pJQ3FAKqgGP{^bK3W1)rL44iI4S=>Ga~r+c zlPu4D5akg<#3Iv6{#}>0l?k1(^7F7!v5z?{{MTOL;B{y-oVIeb;y}V5!=igTzUCQ z@jdiuwVgz3RYpvw$R~-B^N`z2ZIYmNY@dKMzyP{}Zf~Wi)gok6m|Xlk@5A#~1}f*U z39zJN`IrWmgoQa%mvZHP4(Ff(%L$IvRsY1@PlkBhxAwowW5mcQHv1q=-_$|~Rle%6 zs$|*GYAZYQT2#!7=p zHD7%`_|t|bI6>jIA0+{tx9h<`69SVpy7*)ZYvZ|8;y%OlZ=3cqMQW|mpVY7i!Yo0nCCdcOIi9;`&AjE_GILP6DWt} zbdijJ%$&*4&)x|lV43vJ>i`bAnH$Y6H|gE_sf{!^({e%ipvlPFm?=4u6oMPkt-LV= zE`uDf^;MBqIbWhKGdPlBEQmAmsui0fS4OJe`38YHoAYG8%8KiMv!SS;zLKKyOdW6Z$P zxJ!{)aBP+K3*u@DgR(>F>;8^FFoT;6_V*=x8cT+QS#>;4-Tv}L;m4fn&wrJpyCeDW z32X}Fs?~4gr*n;|QgFEjuVlzi0I@ssWHh|m*fiKKcvC7xaLaH5OQX~w7u!$t`g=1C zRakQ`12Fh9lXfNOl5Q~VwX6{Xr1)7ys!3%XEifOQS=;u8uZW!lMD~_p| z83?JhrmcODYhg`~jpu1H(1b3>K!EdfpR;^-QL9x7ghyZ?4UEb3uM_H6MU~X84Ft<0 zX9iQp+8wvW<{Rv8vh?lbAqP!aSc7LE5 zt^-pk6tjJ}EJ%8sqQ!&+MKvWq%bx}p{v^p~jhcM{apmwg^ohj~hNx@B5KozOK~OLl zr#dux-sy8{p>dr{N~&U~YC}iKs0|zw@khzrv}B#&Z_tw0K4GW?lx1>$dBG~-_OY0) zmP?(xT&XsclHhe9Up$ZJt+TtO8kXSMZ-*Ufa1IuE-BGsKViy~od14vO9y_PebW zb${~AKLKDJsi%FdC0BiFA&WFvzwOB<2;i1+^B=A2H{&PEX>599CBg-$mw#6*d*0*# z{!BuZ#W|!BBZ7dmqvI)!y{;?(Q;pt!aRnG@b}63w&6i8N3(M9`bDvH&YS|=C;?^H* zLGECbLaFkAnGc`G^`OCstF)oZEv$Duq2(-xjmhy~o>R{YfjL)W*nX?I{Z!494q#hS zeR{B{7uMeh0ZFKFU*Qu*eL=bP9s8U{+=l8Iz zqsCK}Wjl%*W*i-_(u@O78bwmg0*{?ocZ{MyqIHvbcNj@mX^@p1a(ocJflT_%;&wqF z!-I*u5YVlRdq37G!b_`pU6%6D8E*|GGMqQ9{viG6;W1-HN{L;*wV}ZhXC6|>(SoU2bwh|Ib>+s~t$a3_YSy@h?hjZjAaa7KAm^akwiPn;dv-J7Lr_gk%U zy41!06B35m9j@H~$wor?P=44Kz1i1YuO@{xnjEf!qLjdQT?O2r{Wa?Mk}p)I)k-WF zazhhJ9KVccUVPH0ePJnmT>0o3w_4s1y+nD&=hUdC3M^8hm&mRD?)!mlA{z3yfv#+5 z!dn7RN{enfei}!d>8!h1-1D~Z63#UhMn2f4nAcSI2w8isr2VxfeQg=l#v3d>L^Zej z?6J9*>1~{dVLtXUA5GbBx31$=013MMqHC%T9p~5zq92#%Uh=>BI`~7vuzvN&Ug5>! z@86L&kcT@rk@*4cF-trS2!`r1wzdkc2x3eV4aW;Lj)Kkg0FE<2WjzZ5xMrnU`3v$@ zZMe2KBS0UV4k?s1%dnx4a;idNl6>26fq(gv|3=bJUyBVEvb7{Bo zQ_x+Qag8XS<674I4j?eX7_S@!HFlT}KTOJHQ4d#E;=MwS`%V~n&ZWn|AIdX{%278Qdt27jA z=nWPzrIOc11DUsW;o*8WuQd?F`3&i1I!*QKB$Z^6;6`J;<+e8gF`j$v+%x;eGrlY%s({<#x@HI zOJoo?Ht{CY1U{xa0PU?;sO5F3(F45VkFStdRIl1{)yH!)eWdpk@ z6|Ujkh{!Ao?U-o|c%Mc%ypYn#VSo4;iaPC!R|)|^Gfijt85VdEVJL5yCw0Lt#c%Yh zsV$Dz9wT#oMb=}znj~s2${=DKin}Ywx*NisGE_}v&X`Ddd=nledEND{<#kRT1=m_o zdoJJ5pmsrTAa(}JjZqgJ*&wmCVLrw(U$alZUEjm-0EO-Wc6Xr3FJH3Km+y|T^6e!> zYN441*TWe3CHB2%Q!!}8e9kUiO+RvWEn7V@reM`RwSS!4x~uq*bMh6V={+nC{oS7i=|i@XQ``zR=CZ$24dh;vb~)B~`N-f;2>rrJgAd>3E{ zkS%S2TbPEAXNZB%1`Y1mzShib&E0iU>Ze#YSF=KZTUx!x2W*>9hI!O5Li!(iwg$j` zyI-<;uO#gJuRD5K1`Y6~f80HDMf}IN6cYpZ(iK$dp6UWA=i8xz5zc6lIy}zdn4rho zFc%zSoa^5~%9yyS;^^%P%=Q)o;h5>rfFzHU(_XqX?^|f8ay7B3ilBvIC)f~Dx?f@b zHJAo%~m&z5#s(nlr?HUO$azE167{U`uUj0@d%3S|di z5N+`aJ9`7ykVYS++F$MDP?DBM>UKRbEODPx4bi3W*X~jlyB@$)=`Phyxz