@metarouter/ajs-starter-kit 1.0.94 → 1.0.96
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.
- package/.dist/adobe-analytics/connection.etag.json +1 -1
- package/.dist/adobe-analytics/connection.json +14 -71
- package/.dist/adobe-analytics/kit.etag.json +1 -1
- package/.dist/adobe-analytics/metadata.json +4 -0
- package/.dist/adobe-analytics/playbook.etag.json +1 -1
- package/.dist/adobe-analytics/playbook.json +1 -1
- package/.dist/clinch/kit.etag.json +1 -1
- package/.dist/clinch/metadata.json +5 -1
- package/.dist/clinch/playbook.etag.json +1 -1
- package/.dist/clinch/playbook.json +1 -1
- package/.dist/nextdoor-capi/connection.etag.json +1 -0
- package/.dist/nextdoor-capi/connection.json +23 -0
- package/.dist/nextdoor-capi/kit.etag.json +1 -0
- package/.dist/nextdoor-capi/metadata.json +20 -0
- package/.dist/nextdoor-capi/playbook.etag.json +1 -0
- package/.dist/nextdoor-capi/playbook.json +223 -0
- package/.dist/snapchat-capi/connection.etag.json +1 -0
- package/.dist/snapchat-capi/connection.json +29 -0
- package/.dist/snapchat-capi/kit.etag.json +1 -0
- package/.dist/snapchat-capi/metadata.json +20 -0
- package/.dist/snapchat-capi/playbook.etag.json +1 -0
- package/.dist/snapchat-capi/playbook.json +720 -0
- package/README.md +10 -4
- package/index.js +151 -179
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
"
|
|
1
|
+
"29c91d3ab5ce99fb019b9127b1378427"
|
|
@@ -2,35 +2,23 @@
|
|
|
2
2
|
"params": [
|
|
3
3
|
{
|
|
4
4
|
"name": "DATASTREAM_ID",
|
|
5
|
-
"exampleValue": "datastream-id"
|
|
5
|
+
"exampleValue": "my-datastream-id",
|
|
6
|
+
"isOptional": false
|
|
6
7
|
},
|
|
7
8
|
{
|
|
8
9
|
"name": "ORG_ID",
|
|
9
|
-
"exampleValue": "
|
|
10
|
+
"exampleValue": "my-org-id",
|
|
11
|
+
"isOptional": false
|
|
10
12
|
},
|
|
11
13
|
{
|
|
12
14
|
"name": "API_KEY",
|
|
13
|
-
"exampleValue": "api-key"
|
|
15
|
+
"exampleValue": "my-api-key",
|
|
16
|
+
"isOptional": false
|
|
14
17
|
},
|
|
15
18
|
{
|
|
16
|
-
"name": "
|
|
17
|
-
"exampleValue": "
|
|
18
|
-
|
|
19
|
-
{
|
|
20
|
-
"name": "CLIENT_SECRET",
|
|
21
|
-
"exampleValue": "client-secret"
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
"name": "OAUTH2_REQUEST_URL",
|
|
25
|
-
"defaultValue": "https://ims-na1.adobelogin.com/ims/exchange/jwt"
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
"name": "TECHNICAL_ACCOUNT_ID",
|
|
29
|
-
"exampleValue": "id@techacct.adobe.com"
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
"name": "CLIENT_PEM_KEY",
|
|
33
|
-
"exampleValue": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBg....\n-----END PRIVATE KEY-----\n"
|
|
19
|
+
"name": "ACCESS_TOKEN",
|
|
20
|
+
"exampleValue": "my-access-token",
|
|
21
|
+
"isOptional": false
|
|
34
22
|
}
|
|
35
23
|
],
|
|
36
24
|
"default": {
|
|
@@ -45,59 +33,14 @@
|
|
|
45
33
|
"key": "x-api-key",
|
|
46
34
|
"value": "$$API_KEY$$"
|
|
47
35
|
},
|
|
36
|
+
{
|
|
37
|
+
"key": "Authorization",
|
|
38
|
+
"value": "Bearer $$ACCESS_TOKEN$$"
|
|
39
|
+
},
|
|
48
40
|
{
|
|
49
41
|
"key": "Content-Type",
|
|
50
42
|
"value": "application/json"
|
|
51
43
|
}
|
|
52
|
-
]
|
|
53
|
-
"oauth2_auth": {
|
|
54
|
-
"request": {
|
|
55
|
-
"url": "$$OAUTH2_REQUEST_URL$$",
|
|
56
|
-
"contentType": "application/x-www-form-urlencoded",
|
|
57
|
-
"method": "POST",
|
|
58
|
-
"body": [
|
|
59
|
-
{
|
|
60
|
-
"key": "client_id",
|
|
61
|
-
"value": "$$CLIENT_ID$$"
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
"key": "client_secret",
|
|
65
|
-
"value": "$$CLIENT_SECRET$$"
|
|
66
|
-
}
|
|
67
|
-
]
|
|
68
|
-
},
|
|
69
|
-
"responseAccessTokenKey": "access_token",
|
|
70
|
-
"jwt": {
|
|
71
|
-
"claims": [
|
|
72
|
-
{
|
|
73
|
-
"key": "aud",
|
|
74
|
-
"value": "https://ims-na1.adobelogin.com/c/$$API_KEY$$"
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
"key": "sub",
|
|
78
|
-
"value": "$$TECHNICAL_ACCOUNT_ID$$"
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
"key": "https://ims-na1.adobelogin.com/s/ent_analytics_bulk_ingest_sdk",
|
|
82
|
-
"value": "true"
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
"key": "https://ims-na1.adobelogin.com/s/ent_user_sdk",
|
|
86
|
-
"value": "true"
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
"key": "https://ims-na1.adobelogin.com/s/ent_adobeio_sdk",
|
|
90
|
-
"value": "true"
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
"key": "iss",
|
|
94
|
-
"value": "$$ORG_ID$$"
|
|
95
|
-
}
|
|
96
|
-
],
|
|
97
|
-
"signingMethod": "SIGNING_METHOD_RS256",
|
|
98
|
-
"rsaPemKey": "$$CLIENT_PEM_KEY$$",
|
|
99
|
-
"requestKey": "jwt_token"
|
|
100
|
-
}
|
|
101
|
-
}
|
|
44
|
+
]
|
|
102
45
|
}
|
|
103
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"
|
|
1
|
+
"82ed66f59a755aa413c5e0d2c132dd7a"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"
|
|
1
|
+
"63c7b4f5ed37f7617b5bd2ab9a033079"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"
|
|
1
|
+
"edc5300ec4e21e4688b7f588cba597fa"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"isDraft": false,
|
|
3
|
-
"isBeta":
|
|
3
|
+
"isBeta": false,
|
|
4
4
|
"friendlyName": "Clinch",
|
|
5
5
|
"description": "Clinch is a marketing platform that allows advertisers to create and deliver dynamic video ads that are tailored to individual viewers based on their interests, behaviors, and demographics.",
|
|
6
6
|
"logo": "https://cdn.metarouter.io/clinch.png",
|
|
@@ -19,6 +19,10 @@
|
|
|
19
19
|
{
|
|
20
20
|
"date": "2024-05-29T00:00:00.000Z",
|
|
21
21
|
"note": "Version: 0.2.0\nAdding email and cookie id\nAdding new `identify` event"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"date": "2024-06-12T00:00:00.000Z",
|
|
25
|
+
"note": "Version: 1.0.0\nStable release"
|
|
22
26
|
}
|
|
23
27
|
]
|
|
24
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"
|
|
1
|
+
"8db6f5408f77ec54d1d423bbe93499c2"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"bf1f8b4ee7a42addf33f6ed285e178fc"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"params": [
|
|
3
|
+
{
|
|
4
|
+
"name": "ACCESS_TOKEN",
|
|
5
|
+
"isOptional": false,
|
|
6
|
+
"exampleValue": "my-access-token"
|
|
7
|
+
}
|
|
8
|
+
],
|
|
9
|
+
"default": {
|
|
10
|
+
"method": "POST",
|
|
11
|
+
"headers": [
|
|
12
|
+
{
|
|
13
|
+
"key": "Content-Type",
|
|
14
|
+
"value": "application/json"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"key": "Authorization",
|
|
18
|
+
"value": "Bearer $$ACCESS_TOKEN$$"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"endpoint": "https://ads.nextdoor.com/v2/api/conversions/track"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"74ea04f8032c2f8ee14f736d7df4706d"
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"isDraft": false,
|
|
3
|
+
"isBeta": true,
|
|
4
|
+
"friendlyName": "Nextdoor - CAPI",
|
|
5
|
+
"description": "Nextdoor's CAPI is a server-to-server integration that allows advertisers to send conversion event data directly to Nextdoor's servers.",
|
|
6
|
+
"logo": "https://cdn.metarouter.io/nextdoor-capi.png",
|
|
7
|
+
"color": "#8ED500",
|
|
8
|
+
"eventSource": {
|
|
9
|
+
"isAndroidApp": true,
|
|
10
|
+
"isIosApp": true,
|
|
11
|
+
"isWebApp": true
|
|
12
|
+
},
|
|
13
|
+
"inputSchema": "analytics_js",
|
|
14
|
+
"releaseNotes": [
|
|
15
|
+
{
|
|
16
|
+
"date": "2024-06-05T00:00:00.000Z",
|
|
17
|
+
"note": "Version: 0.1.0\nBeta Version\nNextdoor CAPI initial release"
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"aafbbfc35ddbc48217183c00b28ccb23"
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.1.0",
|
|
3
|
+
"params": [
|
|
4
|
+
{
|
|
5
|
+
"name": "CLIENT_ID",
|
|
6
|
+
"exampleValue": "my-client-id"
|
|
7
|
+
}
|
|
8
|
+
],
|
|
9
|
+
"default": {
|
|
10
|
+
"filters": [
|
|
11
|
+
{
|
|
12
|
+
"byEventNames": {
|
|
13
|
+
"action": "allow",
|
|
14
|
+
"events": [
|
|
15
|
+
""
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
"global": {
|
|
22
|
+
"enrichments": [
|
|
23
|
+
{
|
|
24
|
+
"staticString": "metarouter",
|
|
25
|
+
"outputKey": "partner_id"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"staticString": "$$CLIENT_ID$$",
|
|
29
|
+
"outputKey": "client_id"
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"mappings": [
|
|
33
|
+
{
|
|
34
|
+
"inputKey": "messageId",
|
|
35
|
+
"outputKey": "event_id"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"inputKey": "receivedAt",
|
|
39
|
+
"outputKey": "event_time"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"inputKey": "input",
|
|
43
|
+
"outputKey": "action_source",
|
|
44
|
+
"transforms": [
|
|
45
|
+
{
|
|
46
|
+
"expression": {
|
|
47
|
+
"body": "if input.context.app.name or input.context.device.type or input.context.os.name then return 'app' end\nreturn 'website'",
|
|
48
|
+
"lang": "lua"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"inputKey": "context.page.url",
|
|
55
|
+
"outputKey": "action_source_url"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"inputKey": "context.providers.nextdoor.ndclid",
|
|
59
|
+
"outputKey": "customer.click_id"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"inputKey": "input",
|
|
63
|
+
"outputKey": "customer.email",
|
|
64
|
+
"transforms": [
|
|
65
|
+
{
|
|
66
|
+
"expression": {
|
|
67
|
+
"body": "local email = input.traits.email or input.context.traits.email\nif (email) then return TO_SHA256_HASH(LOWER(TRIM(email))) end",
|
|
68
|
+
"lang": "lua"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"inputKey": "input",
|
|
75
|
+
"outputKey": "customer.phone_number",
|
|
76
|
+
"transforms": [
|
|
77
|
+
{
|
|
78
|
+
"expression": {
|
|
79
|
+
"body": "local phone = input.traits.phone or input.context.traits.phone\nif (phone) then return TO_SHA256_HASH(TRIM(phone)) end",
|
|
80
|
+
"lang": "lua"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"inputKey": "input",
|
|
87
|
+
"outputKey": "customer.first_name",
|
|
88
|
+
"transforms": [
|
|
89
|
+
{
|
|
90
|
+
"expression": {
|
|
91
|
+
"body": "local firstName = input.traits.firstName or input.context.traits.firstName\nif (firstName) then return TO_SHA256_HASH(LOWER(TRIM(firstName))) end",
|
|
92
|
+
"lang": "lua"
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"inputKey": "input",
|
|
99
|
+
"outputKey": "customer.last_name",
|
|
100
|
+
"transforms": [
|
|
101
|
+
{
|
|
102
|
+
"expression": {
|
|
103
|
+
"body": "local lastName = input.traits.lastName or input.context.traits.lastName\nif (lastName) then return TO_SHA256_HASH(LOWER(TRIM(lastName))) end",
|
|
104
|
+
"lang": "lua"
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
]
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"inputKey": "input",
|
|
111
|
+
"outputKey": "customer.date_of_birth",
|
|
112
|
+
"transforms": [
|
|
113
|
+
{
|
|
114
|
+
"expression": {
|
|
115
|
+
"body": "local birthday = input.traits.birthday or input.context.traits.birthday\nif (birthday) then return TO_SHA256_HASH(LOWER(TRIM(birthday))) end",
|
|
116
|
+
"lang": "lua"
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"inputKey": "input",
|
|
123
|
+
"outputKey": "customer.street_address",
|
|
124
|
+
"transforms": [
|
|
125
|
+
{
|
|
126
|
+
"expression": {
|
|
127
|
+
"body": "local street = input.traits.address.street or input.context.traits.address.street\nif (street) then return TO_SHA256_HASH(LOWER(TRIM(street))) end",
|
|
128
|
+
"lang": "lua"
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
]
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"inputKey": "input",
|
|
135
|
+
"outputKey": "customer.city",
|
|
136
|
+
"transforms": [
|
|
137
|
+
{
|
|
138
|
+
"expression": {
|
|
139
|
+
"body": "local city = input.traits.address.city or input.context.traits.address.city\nif (city) then return TO_SHA256_HASH(LOWER(city:gsub('%s+',''))) end",
|
|
140
|
+
"lang": "lua"
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
]
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"inputKey": "input",
|
|
147
|
+
"outputKey": "customer.state",
|
|
148
|
+
"transforms": [
|
|
149
|
+
{
|
|
150
|
+
"expression": {
|
|
151
|
+
"body": "local state = input.traits.address.state or input.context.traits.address.state\nif (state) then return TO_SHA256_HASH(LOWER(TRIM(state))) end",
|
|
152
|
+
"lang": "lua"
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
]
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"inputKey": "input",
|
|
159
|
+
"outputKey": "customer.zip_code",
|
|
160
|
+
"transforms": [
|
|
161
|
+
{
|
|
162
|
+
"expression": {
|
|
163
|
+
"body": "local postalCode = input.traits.address.postalCode or input.context.traits.address.postalCode\nif (postalCode) then return TO_SHA256_HASH(TRIM(postalCode)) end",
|
|
164
|
+
"lang": "lua"
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"inputKey": "input",
|
|
171
|
+
"outputKey": "customer.country",
|
|
172
|
+
"transforms": [
|
|
173
|
+
{
|
|
174
|
+
"expression": {
|
|
175
|
+
"body": "local country = input.traits.address.country or input.context.traits.address.country\nif (country) then return TO_SHA256_HASH(TRIM(country)) end",
|
|
176
|
+
"lang": "lua"
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
]
|
|
180
|
+
}
|
|
181
|
+
]
|
|
182
|
+
},
|
|
183
|
+
"eventSpecific": {
|
|
184
|
+
"order_completed": {
|
|
185
|
+
"enrichments": [
|
|
186
|
+
{
|
|
187
|
+
"staticString": "purchase",
|
|
188
|
+
"outputKey": "event_name"
|
|
189
|
+
}
|
|
190
|
+
],
|
|
191
|
+
"mappings": [
|
|
192
|
+
{
|
|
193
|
+
"inputKey": "properties.order_id",
|
|
194
|
+
"outputKey": "custom.order_id"
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"inputKey": "input",
|
|
198
|
+
"outputKey": "custom.product_context",
|
|
199
|
+
"transforms": [
|
|
200
|
+
{
|
|
201
|
+
"expression": {
|
|
202
|
+
"body": "return MAP(\n input.properties.products,\n function (p)\n return {\n id=p.product_id,\n quantity=p.quantity or 1,\n item_price=p.price\n }\n end\n)",
|
|
203
|
+
"lang": "lua"
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
]
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
"inputKey": "input",
|
|
210
|
+
"outputKey": "custom.order_value",
|
|
211
|
+
"transforms": [
|
|
212
|
+
{
|
|
213
|
+
"expression": {
|
|
214
|
+
"body": "local val = SUM(MAP(input.properties.products, function (p) return p.price * (p.quantity or 1) end))\nlocal currency = UPPER(input.properties.currency) or \"USD\"\nreturn currency .. val",
|
|
215
|
+
"lang": "lua"
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
]
|
|
219
|
+
}
|
|
220
|
+
]
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"a34ddb9e0be871c3e3e2244338a20172"
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"params": [
|
|
3
|
+
{
|
|
4
|
+
"name": "PIXEL_ID",
|
|
5
|
+
"isOptional": false,
|
|
6
|
+
"exampleValue": "my-pixel-id"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"name": "ACCESS_TOKEN",
|
|
10
|
+
"isOptional": false,
|
|
11
|
+
"exampleValue": "my-access-token"
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"default": {
|
|
15
|
+
"method": "POST",
|
|
16
|
+
"headers": [
|
|
17
|
+
{
|
|
18
|
+
"key": "Content-Type",
|
|
19
|
+
"value": "application/json"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"endpoint": "https://tr.snapchat.com/v3/$$PIXEL_ID$$/events?access_token=$$ACCESS_TOKEN$$",
|
|
23
|
+
"batchSize": 500,
|
|
24
|
+
"transform": {
|
|
25
|
+
"body": "request.body = { data = batch }\nreturn request",
|
|
26
|
+
"lang": "lua"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"388db14b5a24fc7e51e5f63f6d3be981"
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"isDraft": false,
|
|
3
|
+
"isBeta": true,
|
|
4
|
+
"friendlyName": "Snapchat - CAPI",
|
|
5
|
+
"description": "Snapchat CAPI is a server-to-server integration that allows advertisers to track conversions and send event data directly to Snapchat's servers.",
|
|
6
|
+
"logo": "https://cdn.metarouter.io/snapchat-capi.png",
|
|
7
|
+
"color": "#fffc00",
|
|
8
|
+
"eventSource": {
|
|
9
|
+
"isAndroidApp": true,
|
|
10
|
+
"isIosApp": true,
|
|
11
|
+
"isWebApp": true
|
|
12
|
+
},
|
|
13
|
+
"inputSchema": "analytics_js",
|
|
14
|
+
"releaseNotes": [
|
|
15
|
+
{
|
|
16
|
+
"date": "2024-06-05T00:00:00.000Z",
|
|
17
|
+
"note": "Version: 0.1.0\nBeta Version\nSnapchat CAPI initial release"
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"11e93e08cb8bed6f7f4771ac850ba028"
|