@or-sdk/identifiers 0.24.5 → 0.25.0-beta.631.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.
package/dist/esm/Identifiers.js
CHANGED
|
@@ -1,16 +1,8 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import { makeList } from '@or-sdk/base';
|
|
11
2
|
import { SdkApi } from '@or-sdk/sdk-api';
|
|
12
3
|
import { extractIdentifierProvidersResponse, getSingleIdentifiers, getGroupIdentifiers, makeIdentifierGroups, } from './utils';
|
|
13
4
|
export class Identifiers {
|
|
5
|
+
sdkApi;
|
|
14
6
|
constructor(params) {
|
|
15
7
|
const { token, discoveryUrl, accountId, sdkUrl } = params;
|
|
16
8
|
this.sdkApi = new SdkApi({
|
|
@@ -20,113 +12,109 @@ export class Identifiers {
|
|
|
20
12
|
sdkUrl,
|
|
21
13
|
});
|
|
22
14
|
}
|
|
23
|
-
init() {
|
|
24
|
-
|
|
25
|
-
yield this.sdkApi.init();
|
|
26
|
-
});
|
|
15
|
+
async init() {
|
|
16
|
+
await this.sdkApi.init();
|
|
27
17
|
}
|
|
28
|
-
fetchIdentifiers(id, groupDetails = true) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
18
|
+
async fetchIdentifiers(id, groupDetails = true) {
|
|
19
|
+
const params = {
|
|
20
|
+
fullInfo: true,
|
|
21
|
+
groupDetails,
|
|
22
|
+
identifier: id ? id : undefined,
|
|
23
|
+
...this.sdkApi.isCrossAccount ? { accountId: this.sdkApi.currentAccountId } : {},
|
|
24
|
+
};
|
|
25
|
+
return this.sdkApi.makeRequest({
|
|
26
|
+
method: 'GET',
|
|
27
|
+
route: '/http/provider/identifiers',
|
|
28
|
+
params,
|
|
36
29
|
});
|
|
37
30
|
}
|
|
38
|
-
listIdentifiers() {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return makeList(getSingleIdentifiers(result));
|
|
42
|
-
});
|
|
31
|
+
async listIdentifiers() {
|
|
32
|
+
const result = await this.fetchIdentifiers();
|
|
33
|
+
return makeList(getSingleIdentifiers(result));
|
|
43
34
|
}
|
|
44
|
-
listIdentifierGroups() {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
return makeList(makeIdentifierGroups(result));
|
|
48
|
-
});
|
|
35
|
+
async listIdentifierGroups() {
|
|
36
|
+
const result = await this.fetchIdentifiers();
|
|
37
|
+
return makeList(makeIdentifierGroups(result));
|
|
49
38
|
}
|
|
50
|
-
getIdentifier(id) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
return singleIdentifiers[0];
|
|
58
|
-
});
|
|
39
|
+
async getIdentifier(id) {
|
|
40
|
+
const result = await this.fetchIdentifiers(id, false);
|
|
41
|
+
const singleIdentifiers = getSingleIdentifiers(result);
|
|
42
|
+
if (singleIdentifiers.length === 0) {
|
|
43
|
+
throw `Id ${id} doesn't belong to an identifier`;
|
|
44
|
+
}
|
|
45
|
+
return singleIdentifiers[0];
|
|
59
46
|
}
|
|
60
|
-
getIdentifierGroup(id) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
return makeIdentifierGroups(result)[0];
|
|
68
|
-
});
|
|
47
|
+
async getIdentifierGroup(id) {
|
|
48
|
+
const result = await this.fetchIdentifiers(id);
|
|
49
|
+
const groupIdentifiers = getGroupIdentifiers(result);
|
|
50
|
+
if (groupIdentifiers.length === 0) {
|
|
51
|
+
throw `Id ${id} doesn't belong to an identifier group`;
|
|
52
|
+
}
|
|
53
|
+
return makeIdentifierGroups(result)[0];
|
|
69
54
|
}
|
|
70
|
-
listObtainableIdentifiers(params = {}) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
params
|
|
76
|
-
|
|
77
|
-
|
|
55
|
+
async listObtainableIdentifiers(params = {}) {
|
|
56
|
+
const result = await this.sdkApi.makeRequest({
|
|
57
|
+
method: 'GET',
|
|
58
|
+
route: '/http/provider/obtainable-identifiers',
|
|
59
|
+
params: {
|
|
60
|
+
...params,
|
|
61
|
+
...this.sdkApi.isCrossAccount ? { accountId: this.sdkApi.currentAccountId } : {},
|
|
62
|
+
},
|
|
78
63
|
});
|
|
64
|
+
return makeList(result);
|
|
79
65
|
}
|
|
80
|
-
releaseIdentifier(id) {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
66
|
+
async releaseIdentifier(id) {
|
|
67
|
+
const params = {
|
|
68
|
+
identifier: id,
|
|
69
|
+
...this.sdkApi.isCrossAccount ? { accountId: this.sdkApi.currentAccountId } : {},
|
|
70
|
+
};
|
|
71
|
+
await this.sdkApi.makeRequest({
|
|
72
|
+
method: 'DELETE',
|
|
73
|
+
route: '/http/provider/identifiers',
|
|
74
|
+
params,
|
|
88
75
|
});
|
|
89
76
|
}
|
|
90
|
-
buyIdentifier(identifiers) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
77
|
+
async buyIdentifier(identifiers) {
|
|
78
|
+
const data = {
|
|
79
|
+
identifiers: Array.isArray(identifiers) ? identifiers : [identifiers],
|
|
80
|
+
...this.sdkApi.isCrossAccount ? { accountId: this.sdkApi.currentAccountId } : {},
|
|
81
|
+
};
|
|
82
|
+
return this.sdkApi.makeRequest({
|
|
83
|
+
method: 'POST',
|
|
84
|
+
route: '/http/provider/identifiers',
|
|
85
|
+
data,
|
|
98
86
|
});
|
|
99
87
|
}
|
|
100
|
-
createProvider(provider, settings = {}) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
88
|
+
async createProvider(provider, settings = {}) {
|
|
89
|
+
const data = {
|
|
90
|
+
provider,
|
|
91
|
+
settings,
|
|
92
|
+
...this.sdkApi.isCrossAccount ? { accountId: this.sdkApi.currentAccountId } : {},
|
|
93
|
+
};
|
|
94
|
+
await this.sdkApi.makeRequest({
|
|
95
|
+
method: 'POST',
|
|
96
|
+
route: '/http/provider/identifier-providers',
|
|
97
|
+
data,
|
|
109
98
|
});
|
|
110
99
|
}
|
|
111
|
-
listProviders() {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
params,
|
|
118
|
-
});
|
|
119
|
-
return extractIdentifierProvidersResponse(data);
|
|
100
|
+
async listProviders() {
|
|
101
|
+
const params = this.sdkApi.isCrossAccount ? { accountId: this.sdkApi.currentAccountId } : {};
|
|
102
|
+
const data = await this.sdkApi.makeRequest({
|
|
103
|
+
method: 'GET',
|
|
104
|
+
route: '/http/provider/identifier-providers',
|
|
105
|
+
params,
|
|
120
106
|
});
|
|
107
|
+
return extractIdentifierProvidersResponse(data);
|
|
121
108
|
}
|
|
122
|
-
deleteProvider(provider) {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
109
|
+
async deleteProvider(provider) {
|
|
110
|
+
const params = {
|
|
111
|
+
provider,
|
|
112
|
+
...this.sdkApi.isCrossAccount ? { accountId: this.sdkApi.currentAccountId } : {},
|
|
113
|
+
};
|
|
114
|
+
await this.sdkApi.makeRequest({
|
|
115
|
+
method: 'DELETE',
|
|
116
|
+
route: '/http/provider/identifier-providers',
|
|
117
|
+
params,
|
|
130
118
|
});
|
|
131
119
|
}
|
|
132
120
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Identifiers.js","sourceRoot":"","sources":["../../src/Identifiers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Identifiers.js","sourceRoot":"","sources":["../../src/Identifiers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAYzC,OAAO,EACL,kCAAkC,EAClC,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,SAAS,CAAC;AAEjB,MAAM,OAAO,WAAW;IACL,MAAM,CAAS;IAEhC,YAAY,MAAyB;QACnC,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QAE1D,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;YACvB,KAAK;YACL,YAAY;YACZ,SAAS;YACT,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,EAAqB,EAAE,YAAY,GAAG,IAAI;QACvE,MAAM,MAAM,GAAG;YACb,QAAQ,EAAE,IAAI;YACd,YAAY;YACZ,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;YAC/B,GAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE;SAClF,CAAC;QAEF,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAe;YAC3C,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,4BAA4B;YACnC,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAQM,KAAK,CAAC,eAAe;QAC1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE7C,OAAO,QAAQ,CAAmB,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,CAAC;IAQM,KAAK,CAAC,oBAAoB;QAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE7C,OAAO,QAAQ,CAAkB,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;IACjE,CAAC;IAQM,KAAK,CAAC,aAAa,CAAC,EAAoB;QAC7C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACtD,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAEvD,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;YAClC,MAAM,MAAM,EAAE,kCAAkC,CAAC;SAClD;QAED,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAQM,KAAK,CAAC,kBAAkB,CAAC,EAAoB;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAErD,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;YACjC,MAAM,MAAM,EAAE,wCAAwC,CAAC;SACxD;QAED,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IAeM,KAAK,CAAC,yBAAyB,CAAC,SAA4C,EAAE;QACnF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAyB;YACnE,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,uCAAuC;YAC9C,MAAM,EAAE;gBACN,GAAG,MAAM;gBACT,GAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE;aAClF;SACF,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAuB,MAAM,CAAC,CAAC;IAChD,CAAC;IAQM,KAAK,CAAC,iBAAiB,CAAC,EAAoB;QACjD,MAAM,MAAM,GAAG;YACb,UAAU,EAAE,EAAE;YACd,GAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE;SAClF,CAAC;QAEF,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAO;YAClC,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,4BAA4B;YACnC,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAQM,KAAK,CAAC,aAAa,CAAC,WAA0D;QACnF,MAAM,IAAI,GAAG;YACX,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;YACrE,GAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE;SAClF,CAAC;QAEF,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAwB;YACpD,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,4BAA4B;YACnC,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAQM,KAAK,CAAC,cAAc,CAAC,QAAoC,EAAE,WAA2C,EAAE;QAC7G,MAAM,IAAI,GAAG;YACX,QAAQ;YACR,QAAQ;YACR,GAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE;SAClF,CAAC;QAEF,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAO;YAClC,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,qCAAqC;YAC5C,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAQM,KAAK,CAAC,aAAa;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAE7F,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAwB;YAChE,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,qCAAqC;YAC5C,MAAM;SACP,CAAC,CAAC;QAEH,OAAO,kCAAkC,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAQM,KAAK,CAAC,cAAc,CAAC,QAAoC;QAC9D,MAAM,MAAM,GAAG;YACb,QAAQ;YACR,GAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE;SAClF,CAAC;QAEF,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAO;YAClC,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,qCAAqC;YAC5C,MAAM;SACP,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -7,7 +7,10 @@ function makeIdentifierGroups(identifierArr) {
|
|
|
7
7
|
const members = singleIdentifiers.filter(identifier => identifier.group &&
|
|
8
8
|
identifier.group === groupIdentifier.phoneNumber);
|
|
9
9
|
const groupCopy = _.clone(groupIdentifier);
|
|
10
|
-
return
|
|
10
|
+
return {
|
|
11
|
+
...groupCopy,
|
|
12
|
+
identifiers: members,
|
|
13
|
+
};
|
|
11
14
|
});
|
|
12
15
|
return identifierGroups;
|
|
13
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"makeIdentifierGroups.js","sourceRoot":"","sources":["../../../src/utils/makeIdentifierGroups.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,QAAQ,CAAC;AAMvB,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAErE,SAAS,oBAAoB,CAAC,aAA2B;IACvD,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAC5D,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAE9D,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE;QAC9D,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK;YACrE,UAAU,CAAC,KAAK,KAAK,eAAe,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAE3C,
|
|
1
|
+
{"version":3,"file":"makeIdentifierGroups.js","sourceRoot":"","sources":["../../../src/utils/makeIdentifierGroups.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,QAAQ,CAAC;AAMvB,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAErE,SAAS,oBAAoB,CAAC,aAA2B;IACvD,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAC5D,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAE9D,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE;QAC9D,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK;YACrE,UAAU,CAAC,KAAK,KAAK,eAAe,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAE3C,OAAO;YACL,GAAG,SAAS;YACZ,WAAW,EAAE,OAAO;SACrB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,eAAe,oBAAoB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@or-sdk/identifiers",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.25.0-beta.631.0",
|
|
4
4
|
"main": "dist/cjs/index.js",
|
|
5
5
|
"module": "dist/esm/index.js",
|
|
6
6
|
"types": "dist/types/index.d.ts",
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
"dev": "pnpm build:watch:esm"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@or-sdk/base": "^0.
|
|
21
|
-
"@or-sdk/sdk-api": "^0.
|
|
20
|
+
"@or-sdk/base": "^0.27.0-beta.631.0",
|
|
21
|
+
"@or-sdk/sdk-api": "^0.25.0-beta.631.0",
|
|
22
22
|
"lodash": "^4.17.21"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
@@ -28,6 +28,5 @@
|
|
|
28
28
|
},
|
|
29
29
|
"publishConfig": {
|
|
30
30
|
"access": "public"
|
|
31
|
-
}
|
|
32
|
-
"gitHead": "7a9ce11ecc97143569b65f3d00fc587a0021a985"
|
|
31
|
+
}
|
|
33
32
|
}
|