@baravak/risloo-profile-cli 3.2.0 → 3.3.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/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"$X1H6UQGD3","scale":{"id":"$RAS-93","title":"مقیاس نگرش مسئولیتپذیری"},"version":"1","edition":"","edition_version":null,"client":{"id":"GH96XX","name":"مراجع","user_id":"IR96XXX"},"room":{"id":"RS96XXXX","manager":{"id":"GH966XXXX","name":"درمانگر","user_id":"IR96XXXX"},"center":{"id":"RS96XXXX","acceptation":null,"status":"active","type":"counseling_center","detail":{"title":"مرکز درمانی"}},"acceptation":null,"status":"active","type":"room"},"case":null,"code":null,"created_at":1674877621,"started_at":1674879347,"scored_at":1677943803,"closed_at":1674879799,"total_amount":0,"prepayment":false,"purchased":true,"amount":null,"billing":null,"description":"## دستور اجرای آزمون\n\nدر این پرسشنامه فهرستی از نگرشها و رویکردها یا عقاید مختلفی که مردم بعضی اوقات از خود نشان می دهند، ارائه شده است. هر جمله را به دقت بخوانید و مشخص کنید که چقدر با آن موافق یا مخالف هستید. برای هر مورد، 7 گزینه پاسخی وجود دارد . گزینهای را که مناسب می دانید مشخص کنید و بر روی آن شماره که نشان دهنده گزینه انتخابی شما است علامت بزنید . دقت کنید که فقط یک پاسخ برای هر رویکرد را انتخاب کنید از آنجائی که مردم با یکدیگر متفاوتند ، پاسخ درست یا نادرست وجود ندارد. برای تصمیمگیری در مورد اینکه گزینه ارائه شده تا چه حد نگرش شما را نشان میدهد گزینهای را که اکثریت اوقات در مورد شما صدق میکند، در نظر بگیرید. گزینهها از گزینه کاملا موافقم تا کاملا مخالفم در هفت درجه تقسیم شده است.","psychologist_description":null,"items":[{"type":"text","text":" من اغلب برای حوادث ناگواری که اتفاق میافتد،احساس مسئولیت میکنم.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"3"},{"type":"text","text":" اگر موقعی که خطری را پیشبینی کردم، دست به عملی نزنم، خودم را درمورد هرگونه پیامدی، مستحق سرزنش میدانم.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"3"},{"type":"text","text":" من در قبال احساس مسئولیت در مورد حوادث ناگوار بسیار حساس هستم.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"3"},{"type":"text","text":"فکر در مورد چیزهای بد درست مانند انجام دادن عمل بد است.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"3"},{"type":"text","text":" من در مورد عواقب کارهایی که انجام میدهم یا انجام نمی دهم، دچار نگرانی زیادی میشوم.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"2"},{"type":"text","text":" از نظر من، عدم اقدام برای جلوگیری از وقوع یک فاجعه، درست مانند این است که خودم فاجعهای را به بار بیاورم.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"3"},{"type":"text","text":" اگر من بدانم احتمال آسیبی وجود دارد،هرچند که به نظر غیر محتمل بیاید، باید همیشه سعی کنم از به وقوع پیوستن آن پیشگیری کنم. هر چند به نظر غیر محتمل باشد.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"3"},{"type":"text","text":" من باید همیشه عواقب و نتایج کوچکترین اعمال و رفتارهایم را مورد توجه قرار دهم و از قبل به آنها فکر کنم.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"2"},{"type":"text","text":" من اغلب مسئولیت چیزهایی را بر عهده میگیرم که دیگران فکر میکنند اصلا تقصیر من نیست.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"3"},{"type":"text","text":" هر چیزی را که من انجام دهم میتواند باعث به وجود آمدن مشکلات جدی شود. ","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"3"},{"type":"text","text":" من اغلب فاصله زیادی با آسیب رساندن به دیگران ندارم.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"3"},{"type":"text","text":" من باید دیگران را از صدمه و آسیب دیدن محافظت کنم.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"3"},{"type":"text","text":"من نباید موجب ایجاد حتی کوچکترین صدمه به دیگران شوم.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"2"},{"type":"text","text":" من به خاطر اعمال و رفتارهایم محکوم خواهم بود.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"3"},{"type":"text","text":" اگر من بتوانم حتی کوچکترین تاثیری در وقوع حوادث ناگوار داشته باشم، باید کاری کنم که جلوی آن حوادث گرفته شود.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"2"},{"type":"text","text":" از نظر من عدم جلوگیری از فاجعهای که حتی احتمال بسیار کمی برای وقوع آن وجود دارد، مانند این است که خودم آن فاجعه را به وجود بیاورم.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"4"},{"type":"text","text":" برای من حتی کوچکترین بیدقتی و غفلت که ممکن است خطری برای دیگران ایجاد کند، غیر قابل بخشش است.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"3"},{"type":"text","text":" در تمام موقعیتهای زندگی،غیر فعال بودن من میتواند به همان اندازه نیت عمدی نادرست،آسیب زا و مضر باشد. ","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"2"},{"type":"text","text":" حتی اگر احتمال وقوع آسیب و صدمه خیلی کم هم باشد، من باید همیشه به هر قیمتی که شده از وقوع آن جلوگیری کنم. ","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"4"},{"type":"text","text":" حتی اگر یک بار هم فکر کنم که ممکن است از من آسیبی به کسی برسد نمیتوانم خودم را ببخشم.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"3"},{"type":"text","text":" بسیاری از اعمال گذشته من به قصد جلوگیری از رسیدن صدمه و آسیب به دیگران بوده است.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"5"},{"type":"text","text":" من باید مطمئن شوم که مردم دیگر از تمامی عواقب اعمالی که من انجام میدهم در امان باشند.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"3"},{"type":"text","text":" دیگران نباید بر قضاوت من تکیه و اعتماد کنند.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"5"},{"type":"text","text":" اگر من اطمینان حاصل نکنم که مستحق سرزنش نیستم،احساس میکنم که باید سرزنش شوم.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"5"},{"type":"text","text":" اگر دقت کافی اعمال کنم، میتوانم جلوی حوادث خطرناک را بگیرم.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"4"},{"type":"text","text":" من اغلب فکر میکنم اگر به اندازه کافی دقت نکنم، اتفاقات ناگوار رخ خواهد داد.","answer":{"type":"optional","options":["کاملا موافقم","بسیار موافقم","تا حدودی موافقم","نظری ندارم","تا حدودی مخالفم","بسیار مخالفم","کاملا مخالفم"]},"user_answered":"4"}],"prerequisites":[{"type":"text","label":"gender","text":"جنسیت","answer":{"type":"select","options":["زن","مرد"]},"alias":"gender","force":true,"user_answered":"1"},{"type":"text","label":"age","text":"سن","answer":{"type":"number"},"alias":"age","force":true,"user_answered":"44"},{"type":"text","label":"education","text":"تحصیلات","answer":{"type":"select","options":["ابتدایی اول","ابتدایی دوم","متوسطه اول","متوسطه دوم","دیپلم","کارشناسی","کارشناسی ارشد","پزشکی عمومی","متخصص","دکتری تخصصی","حوزوی مقدمات","حوزوی سطح۱","حوزوی سطح۲","حوزوی سطح۳","حوزوی سطح۴"]},"alias":"education","force":true,"user_answered":"7"},{"type":"text","label":"marital_status","text":"وضعیت تأهل","answer":{"type":"select","options":["مجرد","متأهل"]},"alias":"marital_status","force":true,"user_answered":"1"}],"cornometer":8,"score":{"raw":125,"conflicting_thoughts_of_self":null,"dichotomous_view_of_self":null,"fear_of_others_judgment":null,"preoccupation_with_self_worth":null,"interpretation_level":null,"percentage_interpretation":null},"score_current_version":"1.0.0","score_last_version":"1.0.0","profiles":[{"id":"F963HQ7","file_name":"X1H6UQGD3.json","slug":"storage/profiles/X1H6UQGD3e16zDL4Rm9ckXWFT8u1cKgUPuKYKFWo8t40czt5tlcnBWju49S5VOINq49a9umQVfd2Evb0ZWQwQ7dYQXLD0mK0MV8bFPRy19dLUGNikUKbCQOgFFUFVr8yo/X1H6UQGD3.json","mode":"profile_json","url":"https://api.risloo.local/storage/profiles/X1H6UQGD3e16zDL4Rm9ckXWFT8u1cKgUPuKYKFWo8t40czt5tlcnBWju49S5VOINq49a9umQVfd2Evb0ZWQwQ7dYQXLD0mK0MV8bFPRy19dLUGNikUKbCQOgFFUFVr8yo/X1H6UQGD3.json","type":"data","mime":"application/json","exec":"json"},{"id":"F963HQY","file_name":"X1H6UQGD3.xlsx","slug":"storage/profiles/X1H6UQGD3e16zDL4Rm9ckXWFT8u1cKgUPuKYKFWo8t40czt5tlcnBWju49S5VOINq49a9umQVfd2Evb0ZWQwQ7dYQXLD0mK0MV8bFPRy19dLUGNikUKbCQOgFFUFVr8yo/X1H6UQGD3.xlsx","mode":"profile_xlsx","url":"https://api.risloo.local/storage/profiles/X1H6UQGD3e16zDL4Rm9ckXWFT8u1cKgUPuKYKFWo8t40czt5tlcnBWju49S5VOINq49a9umQVfd2Evb0ZWQwQ7dYQXLD0mK0MV8bFPRy19dLUGNikUKbCQOgFFUFVr8yo/X1H6UQGD3.xlsx","type":"document","mime":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","exec":"xlsx"}]}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
const { Profile, FS } = require("../Profile");
|
|
2
|
+
|
|
3
|
+
class RAS93 extends Profile {
|
|
4
|
+
// Number of pages
|
|
5
|
+
static pages = 1;
|
|
6
|
+
|
|
7
|
+
// Labels of the sample
|
|
8
|
+
labels = {
|
|
9
|
+
L1: { eng: "raw", fr: "کل" },
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
profileSpec = {
|
|
13
|
+
/* "sample" determines some important info about the sample and profile */
|
|
14
|
+
/* Default prerequisites: 1. gender, 2. age, 3. education */
|
|
15
|
+
/* "prerequisites" is synonym to "fields" in our program */
|
|
16
|
+
sample: {
|
|
17
|
+
name: "مقیاس نگرش مسئولیتپذیری" /* Name of the sample */,
|
|
18
|
+
multiProfile: false /* Whether the sample has multiple profiles or not */,
|
|
19
|
+
questions: false /* Determines whether to get questions from inital dataset or not */,
|
|
20
|
+
defaultFields: true /* Determines whether to have default prerequisites in the profile or not */,
|
|
21
|
+
fields: [] /* In case you want to get some additional fields and show in the profile */,
|
|
22
|
+
},
|
|
23
|
+
/* "profile" determines the dimensions of the drawn profile (to be used in svg tag viewbox) */
|
|
24
|
+
/* calculating its dimensions carefully is of great importance */
|
|
25
|
+
profile: {
|
|
26
|
+
get dimensions() {
|
|
27
|
+
return {
|
|
28
|
+
width: 730 + 2 * this.padding.x,
|
|
29
|
+
height: 404.5 + 2 * this.padding.y,
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
padding: {
|
|
33
|
+
x: 80,
|
|
34
|
+
y: 0,
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
/* "item" is the general term used for independent data element to be drawn in the profile */
|
|
38
|
+
item: {
|
|
39
|
+
minValue: 0 /* Minimum value of the item mark */,
|
|
40
|
+
maxValue: 182 /* Maximum value of the item mark */,
|
|
41
|
+
stops: [0, 182] /* Stops array of the item mark */,
|
|
42
|
+
circle: {
|
|
43
|
+
center: {
|
|
44
|
+
radius: 42.5 /* Radius of the central circle */,
|
|
45
|
+
},
|
|
46
|
+
main: {
|
|
47
|
+
R: 340 /* Radius of the outer circle of the item element */,
|
|
48
|
+
r: 290 /* Radius of the inner circle of the item element */,
|
|
49
|
+
brs: {
|
|
50
|
+
tl: 0 /* Top left border radius */,
|
|
51
|
+
bl: 0 /* Bottom left border radius */,
|
|
52
|
+
tr: 0 /* Top right border radius */,
|
|
53
|
+
br: 0 /* Bottom right border radius */,
|
|
54
|
+
} /* Border radiuses at each end of the gauge of the item element */,
|
|
55
|
+
angles: {
|
|
56
|
+
start: FS.toRadians(-180),
|
|
57
|
+
end: FS.toRadians(0),
|
|
58
|
+
} /* Angles of each end of the item element */,
|
|
59
|
+
direction: false /* Clockwise direction for the item gauge element */,
|
|
60
|
+
base: {
|
|
61
|
+
fill: "#F4F4F5" /* Fill of the base part of the item gauge */,
|
|
62
|
+
stroke: "#E4E4E7" /* Stroke of the base part of the item gauge */,
|
|
63
|
+
},
|
|
64
|
+
body: {
|
|
65
|
+
fill: "#DB2777" /* Fill of the body part of the item gauge */,
|
|
66
|
+
stroke: "#9D174D" /* Stroke of the base part of the item gauge */,
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
/* "labels" part which has to be provided for each profile */
|
|
72
|
+
labels: Object.values(this.labels)
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
constructor(dataset, options, config = {}) {
|
|
76
|
+
super();
|
|
77
|
+
this._init(dataset, options, config);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
_calcContext() {
|
|
81
|
+
const {
|
|
82
|
+
spec: { parameters: spec },
|
|
83
|
+
dataset,
|
|
84
|
+
} = this;
|
|
85
|
+
|
|
86
|
+
const { item: itemSpec } = spec;
|
|
87
|
+
|
|
88
|
+
const itemData = dataset.score[0];
|
|
89
|
+
const item = {
|
|
90
|
+
label: itemData.label,
|
|
91
|
+
mark: itemData.mark,
|
|
92
|
+
angle: this._markToAngle(
|
|
93
|
+
itemData.mark,
|
|
94
|
+
itemSpec.minValue,
|
|
95
|
+
itemSpec.maxValue,
|
|
96
|
+
itemSpec.circle.main.angles,
|
|
97
|
+
itemSpec.circle.main.direction
|
|
98
|
+
),
|
|
99
|
+
stops: itemSpec.stops.map((stop) => ({
|
|
100
|
+
mark: stop,
|
|
101
|
+
angle: this._markToAngle(
|
|
102
|
+
stop,
|
|
103
|
+
itemSpec.minValue,
|
|
104
|
+
itemSpec.maxValue,
|
|
105
|
+
itemSpec.circle.main.angles,
|
|
106
|
+
itemSpec.circle.main.direction
|
|
107
|
+
),
|
|
108
|
+
})),
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
return [{ item }];
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
_markToAngle(mark, min, max, angles, direction) {
|
|
115
|
+
const totalAngle = this._calcDiffAngle(angles.end, angles.start, direction);
|
|
116
|
+
const deltaTheta = ((mark - min) / (max - min)) * totalAngle;
|
|
117
|
+
return this._calcDistAngle(deltaTheta, angles.start, direction);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
_calcDiffAngle(theta, theta0, direction) {
|
|
121
|
+
return direction ? 2 * Math.PI - (theta - theta0) : theta - theta0;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
_calcDistAngle(deltaTheta, theta0, direction) {
|
|
125
|
+
return direction ? 2 * Math.PI - deltaTheta + theta0 : deltaTheta + theta0;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
module.exports = RAS93;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{{#> layout}}
|
|
2
|
+
|
|
3
|
+
<g transform="translate({{spec.profile.padding.x}}, {{spec.profile.padding.y}})">
|
|
4
|
+
<g transform="translate({{math (math spec.item.circle.main.R '+' 10) '+' 8}}, {{math (math spec.item.circle.main.R '+' 10) '+' 12}})">
|
|
5
|
+
<text x="0" y="0" font-size="32" font-weight="500" fill="#DB2777" text-anchor="middle" dy="8">{{item.mark}}</text>
|
|
6
|
+
{{#with spec.item.circle as | circleSpec |}}
|
|
7
|
+
<circle cx="0" cy="0" r="{{circleSpec.center.radius}}" stroke="#A1A1AA" fill="none" stroke-dasharray="3"/>
|
|
8
|
+
{{gauge circleSpec.main.R circleSpec.main.r circleSpec.main.brs circleSpec.main.angles circleSpec.main.direction fill=circleSpec.main.base.fill stroke=circleSpec.main.base.stroke}}
|
|
9
|
+
{{gauge circleSpec.main.R circleSpec.main.r circleSpec.main.brs (object start=circleSpec.main.angles.start end=../item.angle) circleSpec.main.direction fill=circleSpec.main.body.fill stroke=circleSpec.main.body.stroke}}
|
|
10
|
+
{{setVar "p1" (polarToCartesian circleSpec.center.radius ../item.angle)}}
|
|
11
|
+
{{setVar "p2" (polarToCartesian circleSpec.main.R ../item.angle)}}
|
|
12
|
+
<line x1="{{p1.x}}" y1="{{p1.y}}" x2="{{p2.x}}" y2="{{p2.y}}" stroke="#71717A"/>
|
|
13
|
+
{{/with}}
|
|
14
|
+
<g font-size="16" font-weight="400" fill="#A1A1AA">
|
|
15
|
+
{{#each item.stops as | stop index |}}
|
|
16
|
+
{{#with @root.spec.item as | itemSpec |}}
|
|
17
|
+
{{setVar "p" (polarToCartesian (math itemSpec.circle.main.R '+' 10) stop.angle)}}
|
|
18
|
+
{{setVar "betMinus90And90" (boolean (boolean stop.angle '>' (toRad -90)) '&&' (boolean stop.angle '<' (toRad 90)))}}
|
|
19
|
+
<text x="{{p.x}}" y="{{p.y}}" text-anchor="{{ternary betMinus90And90 'end' 'start'}}" dy="0">{{stop.mark}}</text>
|
|
20
|
+
{{/with}}
|
|
21
|
+
{{/each}}
|
|
22
|
+
</g>
|
|
23
|
+
</g>
|
|
24
|
+
</g>
|
|
25
|
+
|
|
26
|
+
{{/layout}}
|