aws-sdk-customerprofiles 1.22.0 → 1.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 65457f6c8b50e184e428481d7e9fab32ee5595ebbe0059f217fc3b43de88762d
4
- data.tar.gz: d1b2fb4511410140a8e73a9bcf3523f898ae20fa55f22846c86ce4673b24fb84
3
+ metadata.gz: 873f685772d2b81ed1bd473376590ebb073ffdfd4337bf7fa7956b26da63307c
4
+ data.tar.gz: 10d62a0420366eefcb3ba8788ec895b7b0af66470ed54f447f9f0aff5932618e
5
5
  SHA512:
6
- metadata.gz: 8bfa23fc150f5db905a2b7727377f8675a522824ae033041617ba4974be8ae7c5a49ffd967f3c02c4b6af6077469801a82765d07c132727c79b9b97c5dedd489
7
- data.tar.gz: 9468e32571e866ae96a468fcd75bcd2bf76b6a3b8878402e0c1358653d3dd2eadfa28fc0d86f6ff38bf9f5b51a269d666134694b1d842d0e1ee59cc26d65bc33
6
+ metadata.gz: 7035a3ffe7ad88607d0a7d26290e73089d1148bc4a905d5bd12a32bf63a28bf2810f40683f631ce6cd097bcd76d8e5967f56a90ba3a32aed3cdee047a0cf2ec3
7
+ data.tar.gz: a62a75ba126b5792bedb14b5cfb849b5a361f9454f49572b365faa09f1a120331393ef380094ed048e32c8b18a480ff5b1dc05ec5d3aa29b8c2c72e56c0f424f
data/CHANGELOG.md CHANGED
@@ -1,6 +1,16 @@
1
1
  Unreleased Changes
2
2
  ------------------
3
3
 
4
+ 1.24.0 (2022-11-14)
5
+ ------------------
6
+
7
+ * Feature - This release enhances the SearchProfiles API by providing functionality to search for profiles using multiple keys and logical operators.
8
+
9
+ 1.23.0 (2022-10-25)
10
+ ------------------
11
+
12
+ * Feature - Code Generated Changes, see `./build_tools` or `aws-sdk-core`'s CHANGELOG.md for details.
13
+
4
14
  1.22.0 (2022-09-13)
5
15
  ------------------
6
16
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.22.0
1
+ 1.24.0
@@ -30,7 +30,7 @@ require 'aws-sdk-core/plugins/http_checksum.rb'
30
30
  require 'aws-sdk-core/plugins/checksum_algorithm.rb'
31
31
  require 'aws-sdk-core/plugins/defaults_mode.rb'
32
32
  require 'aws-sdk-core/plugins/recursion_detection.rb'
33
- require 'aws-sdk-core/plugins/signature_v4.rb'
33
+ require 'aws-sdk-core/plugins/sign.rb'
34
34
  require 'aws-sdk-core/plugins/protocols/rest_json.rb'
35
35
 
36
36
  Aws::Plugins::GlobalConfiguration.add_identifier(:customerprofiles)
@@ -79,8 +79,9 @@ module Aws::CustomerProfiles
79
79
  add_plugin(Aws::Plugins::ChecksumAlgorithm)
80
80
  add_plugin(Aws::Plugins::DefaultsMode)
81
81
  add_plugin(Aws::Plugins::RecursionDetection)
82
- add_plugin(Aws::Plugins::SignatureV4)
82
+ add_plugin(Aws::Plugins::Sign)
83
83
  add_plugin(Aws::Plugins::Protocols::RestJson)
84
+ add_plugin(Aws::CustomerProfiles::Plugins::Endpoints)
84
85
 
85
86
  # @overload initialize(options)
86
87
  # @param [Hash] options
@@ -287,6 +288,19 @@ module Aws::CustomerProfiles
287
288
  # ** Please note ** When response stubbing is enabled, no HTTP
288
289
  # requests are made, and retries are disabled.
289
290
  #
291
+ # @option options [Aws::TokenProvider] :token_provider
292
+ # A Bearer Token Provider. This can be an instance of any one of the
293
+ # following classes:
294
+ #
295
+ # * `Aws::StaticTokenProvider` - Used for configuring static, non-refreshing
296
+ # tokens.
297
+ #
298
+ # * `Aws::SSOTokenProvider` - Used for loading tokens from AWS SSO using an
299
+ # access token generated from `aws login`.
300
+ #
301
+ # When `:token_provider` is not configured directly, the `Aws::TokenProviderChain`
302
+ # will be used to search for tokens configured for your profile in shared configuration files.
303
+ #
290
304
  # @option options [Boolean] :use_dualstack_endpoint
291
305
  # When set to `true`, dualstack enabled endpoints (with `.aws` TLD)
292
306
  # will be used if available.
@@ -300,6 +314,9 @@ module Aws::CustomerProfiles
300
314
  # When `true`, request parameters are validated before
301
315
  # sending the request.
302
316
  #
317
+ # @option options [Aws::CustomerProfiles::EndpointProvider] :endpoint_provider
318
+ # The endpoint provider used to resolve endpoints. Any object that responds to `#resolve_endpoint(parameters)` where `parameters` is a Struct similar to `Aws::CustomerProfiles::EndpointParameters`
319
+ #
303
320
  # @option options [URI::HTTP,String] :http_proxy A proxy to send
304
321
  # requests through. Formatted like 'http://proxy.com:123'.
305
322
  #
@@ -2515,8 +2532,14 @@ module Aws::CustomerProfiles
2515
2532
  req.send_request(options)
2516
2533
  end
2517
2534
 
2518
- # Searches for profiles within a specific domain name using name, phone
2519
- # number, email address, account number, or a custom defined index.
2535
+ # Searches for profiles within a specific domain using one or more
2536
+ # predefined search keys (e.g., \_fullName, \_phone, \_email, \_account,
2537
+ # etc.) and/or custom-defined search keys. A search key is a data type
2538
+ # pair that consists of a `KeyName` and `Values` list.
2539
+ #
2540
+ # This operation supports searching for profiles with a minimum of 1
2541
+ # key-value(s) pair and up to 5 key-value(s) pairs using either `AND` or
2542
+ # `OR` logic.
2520
2543
  #
2521
2544
  # @option params [String] :next_token
2522
2545
  # The pagination token from the previous SearchProfiles API call.
@@ -2524,6 +2547,8 @@ module Aws::CustomerProfiles
2524
2547
  # @option params [Integer] :max_results
2525
2548
  # The maximum number of objects returned per page.
2526
2549
  #
2550
+ # The default is 20 if this parameter is not included in the request.
2551
+ #
2527
2552
  # @option params [required, String] :domain_name
2528
2553
  # The unique name of the domain.
2529
2554
  #
@@ -2539,6 +2564,33 @@ module Aws::CustomerProfiles
2539
2564
  # @option params [required, Array<String>] :values
2540
2565
  # A list of key values.
2541
2566
  #
2567
+ # @option params [Array<Types::AdditionalSearchKey>] :additional_search_keys
2568
+ # A list of `AdditionalSearchKey` objects that are each searchable
2569
+ # identifiers of a profile. Each `AdditionalSearchKey` object contains a
2570
+ # `KeyName` and a list of `Values` associated with that specific key
2571
+ # (i.e., a key-value(s) pair). These additional search keys will be used
2572
+ # in conjunction with the `LogicalOperator` and the required `KeyName`
2573
+ # and `Values` parameters to search for profiles that satisfy the search
2574
+ # criteria.
2575
+ #
2576
+ # @option params [String] :logical_operator
2577
+ # Relationship between all specified search keys that will be used to
2578
+ # search for profiles. This includes the required `KeyName` and `Values`
2579
+ # parameters as well as any key-value(s) pairs specified in the
2580
+ # `AdditionalSearchKeys` list.
2581
+ #
2582
+ # This parameter influences which profiles will be returned in the
2583
+ # response in the following manner:
2584
+ #
2585
+ # * `AND` - The response only includes profiles that match all of the
2586
+ # search keys.
2587
+ #
2588
+ # * `OR` - The response includes profiles that match at least one of the
2589
+ # search keys.
2590
+ #
2591
+ # The `OR` relationship is the default behavior if this parameter is not
2592
+ # included in the request.
2593
+ #
2542
2594
  # @return [Types::SearchProfilesResponse] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
2543
2595
  #
2544
2596
  # * {Types::SearchProfilesResponse#items #items} => Array&lt;Types::Profile&gt;
@@ -2552,6 +2604,13 @@ module Aws::CustomerProfiles
2552
2604
  # domain_name: "name", # required
2553
2605
  # key_name: "name", # required
2554
2606
  # values: ["string1To255"], # required
2607
+ # additional_search_keys: [
2608
+ # {
2609
+ # key_name: "name", # required
2610
+ # values: ["string1To255"], # required
2611
+ # },
2612
+ # ],
2613
+ # logical_operator: "AND", # accepts AND, OR
2555
2614
  # })
2556
2615
  #
2557
2616
  # @example Response structure
@@ -2616,6 +2675,10 @@ module Aws::CustomerProfiles
2616
2675
  # resp.items[0].billing_address.postal_code #=> String
2617
2676
  # resp.items[0].attributes #=> Hash
2618
2677
  # resp.items[0].attributes["string1To255"] #=> String
2678
+ # resp.items[0].found_by_items #=> Array
2679
+ # resp.items[0].found_by_items[0].key_name #=> String
2680
+ # resp.items[0].found_by_items[0].values #=> Array
2681
+ # resp.items[0].found_by_items[0].values[0] #=> String
2619
2682
  # resp.next_token #=> String
2620
2683
  #
2621
2684
  # @see http://docs.aws.amazon.com/goto/WebAPI/customer-profiles-2020-08-15/SearchProfiles AWS API Documentation
@@ -3025,7 +3088,7 @@ module Aws::CustomerProfiles
3025
3088
  params: params,
3026
3089
  config: config)
3027
3090
  context[:gem_name] = 'aws-sdk-customerprofiles'
3028
- context[:gem_version] = '1.22.0'
3091
+ context[:gem_version] = '1.24.0'
3029
3092
  Seahorse::Client::Request.new(handlers, context)
3030
3093
  end
3031
3094
 
@@ -16,6 +16,7 @@ module Aws::CustomerProfiles
16
16
  AccessDeniedException = Shapes::StructureShape.new(name: 'AccessDeniedException')
17
17
  AddProfileKeyRequest = Shapes::StructureShape.new(name: 'AddProfileKeyRequest')
18
18
  AddProfileKeyResponse = Shapes::StructureShape.new(name: 'AddProfileKeyResponse')
19
+ AdditionalSearchKey = Shapes::StructureShape.new(name: 'AdditionalSearchKey')
19
20
  Address = Shapes::StructureShape.new(name: 'Address')
20
21
  AppflowIntegration = Shapes::StructureShape.new(name: 'AppflowIntegration')
21
22
  AppflowIntegrationWorkflowAttributes = Shapes::StructureShape.new(name: 'AppflowIntegrationWorkflowAttributes')
@@ -71,6 +72,7 @@ module Aws::CustomerProfiles
71
72
  FlowDefinition = Shapes::StructureShape.new(name: 'FlowDefinition')
72
73
  FlowDescription = Shapes::StringShape.new(name: 'FlowDescription')
73
74
  FlowName = Shapes::StringShape.new(name: 'FlowName')
75
+ FoundByKeyValue = Shapes::StructureShape.new(name: 'FoundByKeyValue')
74
76
  Gender = Shapes::StringShape.new(name: 'Gender')
75
77
  GetAutoMergingPreviewRequest = Shapes::StructureShape.new(name: 'GetAutoMergingPreviewRequest')
76
78
  GetAutoMergingPreviewResponse = Shapes::StructureShape.new(name: 'GetAutoMergingPreviewResponse')
@@ -213,9 +215,12 @@ module Aws::CustomerProfiles
213
215
  WorkflowType = Shapes::StringShape.new(name: 'WorkflowType')
214
216
  ZendeskConnectorOperator = Shapes::StringShape.new(name: 'ZendeskConnectorOperator')
215
217
  ZendeskSourceProperties = Shapes::StructureShape.new(name: 'ZendeskSourceProperties')
218
+ additionalSearchKeysList = Shapes::ListShape.new(name: 'additionalSearchKeysList')
216
219
  boolean = Shapes::BooleanShape.new(name: 'boolean')
217
220
  encryptionKey = Shapes::StringShape.new(name: 'encryptionKey')
218
221
  expirationDaysInteger = Shapes::IntegerShape.new(name: 'expirationDaysInteger')
222
+ foundByList = Shapes::ListShape.new(name: 'foundByList')
223
+ logicalOperator = Shapes::StringShape.new(name: 'logicalOperator')
219
224
  long = Shapes::IntegerShape.new(name: 'long')
220
225
  matchesNumber = Shapes::IntegerShape.new(name: 'matchesNumber')
221
226
  maxSize100 = Shapes::IntegerShape.new(name: 'maxSize100')
@@ -252,6 +257,10 @@ module Aws::CustomerProfiles
252
257
  AddProfileKeyResponse.add_member(:values, Shapes::ShapeRef.new(shape: requestValueList, location_name: "Values"))
253
258
  AddProfileKeyResponse.struct_class = Types::AddProfileKeyResponse
254
259
 
260
+ AdditionalSearchKey.add_member(:key_name, Shapes::ShapeRef.new(shape: name, required: true, location_name: "KeyName"))
261
+ AdditionalSearchKey.add_member(:values, Shapes::ShapeRef.new(shape: requestValueList, required: true, location_name: "Values"))
262
+ AdditionalSearchKey.struct_class = Types::AdditionalSearchKey
263
+
255
264
  Address.add_member(:address_1, Shapes::ShapeRef.new(shape: string1To255, location_name: "Address1"))
256
265
  Address.add_member(:address_2, Shapes::ShapeRef.new(shape: string1To255, location_name: "Address2"))
257
266
  Address.add_member(:address_3, Shapes::ShapeRef.new(shape: string1To255, location_name: "Address3"))
@@ -481,6 +490,10 @@ module Aws::CustomerProfiles
481
490
  FlowDefinition.add_member(:trigger_config, Shapes::ShapeRef.new(shape: TriggerConfig, required: true, location_name: "TriggerConfig"))
482
491
  FlowDefinition.struct_class = Types::FlowDefinition
483
492
 
493
+ FoundByKeyValue.add_member(:key_name, Shapes::ShapeRef.new(shape: name, location_name: "KeyName"))
494
+ FoundByKeyValue.add_member(:values, Shapes::ShapeRef.new(shape: requestValueList, location_name: "Values"))
495
+ FoundByKeyValue.struct_class = Types::FoundByKeyValue
496
+
484
497
  GetAutoMergingPreviewRequest.add_member(:domain_name, Shapes::ShapeRef.new(shape: name, required: true, location: "uri", location_name: "DomainName"))
485
498
  GetAutoMergingPreviewRequest.add_member(:consolidation, Shapes::ShapeRef.new(shape: Consolidation, required: true, location_name: "Consolidation"))
486
499
  GetAutoMergingPreviewRequest.add_member(:conflict_resolution, Shapes::ShapeRef.new(shape: ConflictResolution, required: true, location_name: "ConflictResolution"))
@@ -843,6 +856,7 @@ module Aws::CustomerProfiles
843
856
  Profile.add_member(:mailing_address, Shapes::ShapeRef.new(shape: Address, location_name: "MailingAddress"))
844
857
  Profile.add_member(:billing_address, Shapes::ShapeRef.new(shape: Address, location_name: "BillingAddress"))
845
858
  Profile.add_member(:attributes, Shapes::ShapeRef.new(shape: Attributes, location_name: "Attributes"))
859
+ Profile.add_member(:found_by_items, Shapes::ShapeRef.new(shape: foundByList, location_name: "FoundByItems"))
846
860
  Profile.struct_class = Types::Profile
847
861
 
848
862
  ProfileIdList.member = Shapes::ShapeRef.new(shape: uuid)
@@ -945,6 +959,8 @@ module Aws::CustomerProfiles
945
959
  SearchProfilesRequest.add_member(:domain_name, Shapes::ShapeRef.new(shape: name, required: true, location: "uri", location_name: "DomainName"))
946
960
  SearchProfilesRequest.add_member(:key_name, Shapes::ShapeRef.new(shape: name, required: true, location_name: "KeyName"))
947
961
  SearchProfilesRequest.add_member(:values, Shapes::ShapeRef.new(shape: requestValueList, required: true, location_name: "Values"))
962
+ SearchProfilesRequest.add_member(:additional_search_keys, Shapes::ShapeRef.new(shape: additionalSearchKeysList, location_name: "AdditionalSearchKeys"))
963
+ SearchProfilesRequest.add_member(:logical_operator, Shapes::ShapeRef.new(shape: logicalOperator, location_name: "LogicalOperator"))
948
964
  SearchProfilesRequest.struct_class = Types::SearchProfilesRequest
949
965
 
950
966
  SearchProfilesResponse.add_member(:items, Shapes::ShapeRef.new(shape: ProfileList, location_name: "Items"))
@@ -1087,6 +1103,10 @@ module Aws::CustomerProfiles
1087
1103
  ZendeskSourceProperties.add_member(:object, Shapes::ShapeRef.new(shape: Object, required: true, location_name: "Object"))
1088
1104
  ZendeskSourceProperties.struct_class = Types::ZendeskSourceProperties
1089
1105
 
1106
+ additionalSearchKeysList.member = Shapes::ShapeRef.new(shape: AdditionalSearchKey)
1107
+
1108
+ foundByList.member = Shapes::ShapeRef.new(shape: FoundByKeyValue)
1109
+
1090
1110
  requestValueList.member = Shapes::ShapeRef.new(shape: string1To255)
1091
1111
 
1092
1112
 
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ # WARNING ABOUT GENERATED CODE
4
+ #
5
+ # This file is generated. See the contributing guide for more information:
6
+ # https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
7
+ #
8
+ # WARNING ABOUT GENERATED CODE
9
+
10
+ module Aws::CustomerProfiles
11
+ # Endpoint parameters used to influence endpoints per request.
12
+ #
13
+ # @!attribute region
14
+ # The AWS region used to dispatch the request.
15
+ #
16
+ # @return [String]
17
+ #
18
+ # @!attribute use_dual_stack
19
+ # When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
20
+ #
21
+ # @return [Boolean]
22
+ #
23
+ # @!attribute use_fips
24
+ # When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.
25
+ #
26
+ # @return [Boolean]
27
+ #
28
+ # @!attribute endpoint
29
+ # Override the endpoint used to send this request
30
+ #
31
+ # @return [String]
32
+ #
33
+ EndpointParameters = Struct.new(
34
+ :region,
35
+ :use_dual_stack,
36
+ :use_fips,
37
+ :endpoint,
38
+ ) do
39
+ include Aws::Structure
40
+
41
+ # @api private
42
+ class << self
43
+ PARAM_MAP = {
44
+ 'Region' => :region,
45
+ 'UseDualStack' => :use_dual_stack,
46
+ 'UseFIPS' => :use_fips,
47
+ 'Endpoint' => :endpoint,
48
+ }.freeze
49
+ end
50
+
51
+ def initialize(options = {})
52
+ self[:region] = options[:region]
53
+ self[:use_dual_stack] = options[:use_dual_stack]
54
+ self[:use_dual_stack] = false if self[:use_dual_stack].nil?
55
+ if self[:use_dual_stack].nil?
56
+ raise ArgumentError, "Missing required EndpointParameter: :use_dual_stack"
57
+ end
58
+ self[:use_fips] = options[:use_fips]
59
+ self[:use_fips] = false if self[:use_fips].nil?
60
+ if self[:use_fips].nil?
61
+ raise ArgumentError, "Missing required EndpointParameter: :use_fips"
62
+ end
63
+ self[:endpoint] = options[:endpoint]
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,111 @@
1
+ # frozen_string_literal: true
2
+
3
+ # WARNING ABOUT GENERATED CODE
4
+ #
5
+ # This file is generated. See the contributing guide for more information:
6
+ # https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
7
+ #
8
+ # WARNING ABOUT GENERATED CODE
9
+
10
+ module Aws::CustomerProfiles
11
+ class EndpointProvider
12
+ def initialize(rule_set = nil)
13
+ @@rule_set ||= begin
14
+ endpoint_rules = Aws::Json.load(Base64.decode64(RULES))
15
+ Aws::Endpoints::RuleSet.new(
16
+ version: endpoint_rules['version'],
17
+ service_id: endpoint_rules['serviceId'],
18
+ parameters: endpoint_rules['parameters'],
19
+ rules: endpoint_rules['rules']
20
+ )
21
+ end
22
+ @provider = Aws::Endpoints::RulesProvider.new(rule_set || @@rule_set)
23
+ end
24
+
25
+ def resolve_endpoint(parameters)
26
+ @provider.resolve_endpoint(parameters)
27
+ end
28
+
29
+ # @api private
30
+ RULES = <<-JSON
31
+ eyJ2ZXJzaW9uIjoiMS4wIiwicGFyYW1ldGVycyI6eyJSZWdpb24iOnsiYnVp
32
+ bHRJbiI6IkFXUzo6UmVnaW9uIiwicmVxdWlyZWQiOmZhbHNlLCJkb2N1bWVu
33
+ dGF0aW9uIjoiVGhlIEFXUyByZWdpb24gdXNlZCB0byBkaXNwYXRjaCB0aGUg
34
+ cmVxdWVzdC4iLCJ0eXBlIjoiU3RyaW5nIn0sIlVzZUR1YWxTdGFjayI6eyJi
35
+ dWlsdEluIjoiQVdTOjpVc2VEdWFsU3RhY2siLCJyZXF1aXJlZCI6dHJ1ZSwi
36
+ ZGVmYXVsdCI6ZmFsc2UsImRvY3VtZW50YXRpb24iOiJXaGVuIHRydWUsIHVz
37
+ ZSB0aGUgZHVhbC1zdGFjayBlbmRwb2ludC4gSWYgdGhlIGNvbmZpZ3VyZWQg
38
+ ZW5kcG9pbnQgZG9lcyBub3Qgc3VwcG9ydCBkdWFsLXN0YWNrLCBkaXNwYXRj
39
+ aGluZyB0aGUgcmVxdWVzdCBNQVkgcmV0dXJuIGFuIGVycm9yLiIsInR5cGUi
40
+ OiJCb29sZWFuIn0sIlVzZUZJUFMiOnsiYnVpbHRJbiI6IkFXUzo6VXNlRklQ
41
+ UyIsInJlcXVpcmVkIjp0cnVlLCJkZWZhdWx0IjpmYWxzZSwiZG9jdW1lbnRh
42
+ dGlvbiI6IldoZW4gdHJ1ZSwgc2VuZCB0aGlzIHJlcXVlc3QgdG8gdGhlIEZJ
43
+ UFMtY29tcGxpYW50IHJlZ2lvbmFsIGVuZHBvaW50LiBJZiB0aGUgY29uZmln
44
+ dXJlZCBlbmRwb2ludCBkb2VzIG5vdCBoYXZlIGEgRklQUyBjb21wbGlhbnQg
45
+ ZW5kcG9pbnQsIGRpc3BhdGNoaW5nIHRoZSByZXF1ZXN0IHdpbGwgcmV0dXJu
46
+ IGFuIGVycm9yLiIsInR5cGUiOiJCb29sZWFuIn0sIkVuZHBvaW50Ijp7ImJ1
47
+ aWx0SW4iOiJTREs6OkVuZHBvaW50IiwicmVxdWlyZWQiOmZhbHNlLCJkb2N1
48
+ bWVudGF0aW9uIjoiT3ZlcnJpZGUgdGhlIGVuZHBvaW50IHVzZWQgdG8gc2Vu
49
+ ZCB0aGlzIHJlcXVlc3QiLCJ0eXBlIjoiU3RyaW5nIn19LCJydWxlcyI6W3si
50
+ Y29uZGl0aW9ucyI6W3siZm4iOiJhd3MucGFydGl0aW9uIiwiYXJndiI6W3si
51
+ cmVmIjoiUmVnaW9uIn1dLCJhc3NpZ24iOiJQYXJ0aXRpb25SZXN1bHQifV0s
52
+ InR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRpdGlvbnMiOlt7ImZuIjoi
53
+ aXNTZXQiLCJhcmd2IjpbeyJyZWYiOiJFbmRwb2ludCJ9XX0seyJmbiI6InBh
54
+ cnNlVVJMIiwiYXJndiI6W3sicmVmIjoiRW5kcG9pbnQifV0sImFzc2lnbiI6
55
+ InVybCJ9XSwidHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0aW9ucyI6
56
+ W3siZm4iOiJib29sZWFuRXF1YWxzIiwiYXJndiI6W3sicmVmIjoiVXNlRklQ
57
+ UyJ9LHRydWVdfV0sImVycm9yIjoiSW52YWxpZCBDb25maWd1cmF0aW9uOiBG
58
+ SVBTIGFuZCBjdXN0b20gZW5kcG9pbnQgYXJlIG5vdCBzdXBwb3J0ZWQiLCJ0
59
+ eXBlIjoiZXJyb3IifSx7ImNvbmRpdGlvbnMiOltdLCJ0eXBlIjoidHJlZSIs
60
+ InJ1bGVzIjpbeyJjb25kaXRpb25zIjpbeyJmbiI6ImJvb2xlYW5FcXVhbHMi
61
+ LCJhcmd2IjpbeyJyZWYiOiJVc2VEdWFsU3RhY2sifSx0cnVlXX1dLCJlcnJv
62
+ ciI6IkludmFsaWQgQ29uZmlndXJhdGlvbjogRHVhbHN0YWNrIGFuZCBjdXN0
63
+ b20gZW5kcG9pbnQgYXJlIG5vdCBzdXBwb3J0ZWQiLCJ0eXBlIjoiZXJyb3Ii
64
+ fSx7ImNvbmRpdGlvbnMiOltdLCJlbmRwb2ludCI6eyJ1cmwiOnsicmVmIjoi
65
+ RW5kcG9pbnQifSwicHJvcGVydGllcyI6e30sImhlYWRlcnMiOnt9fSwidHlw
66
+ ZSI6ImVuZHBvaW50In1dfV19LHsiY29uZGl0aW9ucyI6W3siZm4iOiJib29s
67
+ ZWFuRXF1YWxzIiwiYXJndiI6W3sicmVmIjoiVXNlRklQUyJ9LHRydWVdfSx7
68
+ ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt7InJlZiI6IlVzZUR1YWxT
69
+ dGFjayJ9LHRydWVdfV0sInR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRp
70
+ dGlvbnMiOlt7ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt0cnVlLHsi
71
+ Zm4iOiJnZXRBdHRyIiwiYXJndiI6W3sicmVmIjoiUGFydGl0aW9uUmVzdWx0
72
+ In0sInN1cHBvcnRzRklQUyJdfV19LHsiZm4iOiJib29sZWFuRXF1YWxzIiwi
73
+ YXJndiI6W3RydWUseyJmbiI6ImdldEF0dHIiLCJhcmd2IjpbeyJyZWYiOiJQ
74
+ YXJ0aXRpb25SZXN1bHQifSwic3VwcG9ydHNEdWFsU3RhY2siXX1dfV0sInR5
75
+ cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRpdGlvbnMiOltdLCJlbmRwb2lu
76
+ dCI6eyJ1cmwiOiJodHRwczovL3Byb2ZpbGUtZmlwcy57UmVnaW9ufS57UGFy
77
+ dGl0aW9uUmVzdWx0I2R1YWxTdGFja0Ruc1N1ZmZpeH0iLCJwcm9wZXJ0aWVz
78
+ Ijp7fSwiaGVhZGVycyI6e319LCJ0eXBlIjoiZW5kcG9pbnQifV19LHsiY29u
79
+ ZGl0aW9ucyI6W10sImVycm9yIjoiRklQUyBhbmQgRHVhbFN0YWNrIGFyZSBl
80
+ bmFibGVkLCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3VwcG9ydCBv
81
+ bmUgb3IgYm90aCIsInR5cGUiOiJlcnJvciJ9XX0seyJjb25kaXRpb25zIjpb
82
+ eyJmbiI6ImJvb2xlYW5FcXVhbHMiLCJhcmd2IjpbeyJyZWYiOiJVc2VGSVBT
83
+ In0sdHJ1ZV19XSwidHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0aW9u
84
+ cyI6W3siZm4iOiJib29sZWFuRXF1YWxzIiwiYXJndiI6W3RydWUseyJmbiI6
85
+ ImdldEF0dHIiLCJhcmd2IjpbeyJyZWYiOiJQYXJ0aXRpb25SZXN1bHQifSwi
86
+ c3VwcG9ydHNGSVBTIl19XX1dLCJ0eXBlIjoidHJlZSIsInJ1bGVzIjpbeyJj
87
+ b25kaXRpb25zIjpbXSwidHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0
88
+ aW9ucyI6W10sImVuZHBvaW50Ijp7InVybCI6Imh0dHBzOi8vcHJvZmlsZS1m
89
+ aXBzLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZG5zU3VmZml4fSIsInBy
90
+ b3BlcnRpZXMiOnt9LCJoZWFkZXJzIjp7fX0sInR5cGUiOiJlbmRwb2ludCJ9
91
+ XX1dfSx7ImNvbmRpdGlvbnMiOltdLCJlcnJvciI6IkZJUFMgaXMgZW5hYmxl
92
+ ZCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3VwcG9ydCBGSVBTIiwi
93
+ dHlwZSI6ImVycm9yIn1dfSx7ImNvbmRpdGlvbnMiOlt7ImZuIjoiYm9vbGVh
94
+ bkVxdWFscyIsImFyZ3YiOlt7InJlZiI6IlVzZUR1YWxTdGFjayJ9LHRydWVd
95
+ fV0sInR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRpdGlvbnMiOlt7ImZu
96
+ IjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt0cnVlLHsiZm4iOiJnZXRBdHRy
97
+ IiwiYXJndiI6W3sicmVmIjoiUGFydGl0aW9uUmVzdWx0In0sInN1cHBvcnRz
98
+ RHVhbFN0YWNrIl19XX1dLCJ0eXBlIjoidHJlZSIsInJ1bGVzIjpbeyJjb25k
99
+ aXRpb25zIjpbXSwiZW5kcG9pbnQiOnsidXJsIjoiaHR0cHM6Ly9wcm9maWxl
100
+ LntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZHVhbFN0YWNrRG5zU3VmZml4
101
+ fSIsInByb3BlcnRpZXMiOnt9LCJoZWFkZXJzIjp7fX0sInR5cGUiOiJlbmRw
102
+ b2ludCJ9XX0seyJjb25kaXRpb25zIjpbXSwiZXJyb3IiOiJEdWFsU3RhY2sg
103
+ aXMgZW5hYmxlZCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3VwcG9y
104
+ dCBEdWFsU3RhY2siLCJ0eXBlIjoiZXJyb3IifV19LHsiY29uZGl0aW9ucyI6
105
+ W10sImVuZHBvaW50Ijp7InVybCI6Imh0dHBzOi8vcHJvZmlsZS57UmVnaW9u
106
+ fS57UGFydGl0aW9uUmVzdWx0I2Ruc1N1ZmZpeH0iLCJwcm9wZXJ0aWVzIjp7
107
+ fSwiaGVhZGVycyI6e319LCJ0eXBlIjoiZW5kcG9pbnQifV19XX0=
108
+
109
+ JSON
110
+ end
111
+ end